일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 리펙터링
- MVVM
- clean architecture
- map
- Xcode
- HIG
- Observable
- Refactoring
- tableView
- UITextView
- Clean Code
- swiftUI
- 스위프트
- 리팩토링
- SWIFT
- ios
- uiscrollview
- Protocol
- ribs
- rxswift
- swift documentation
- collectionview
- 애니메이션
- Human interface guide
- 리펙토링
- uitableview
- UICollectionView
- 클린 코드
- combine
- RxCocoa
- Today
- Total
목록swift 5 문법 (23)
김종권의 iOS 앱 개발 알아가기
1. 정의 1) 객체지향언어 : - 데이터를 객체로 취급하고 처리 요청을 받은 객체가 자기 안에 있는 기능을 가지고 처리 - 추상화, 캡슐화, 상속, 다형성 - 데이터를 기록하는 것을 강조 2) 함수형언어 : - 최소한의 기능 : 데이터를 함수형(인풋과 아웃풋)으로 표현 - 불변성 목적 : 변경 가능한 상태를 최대한 제거 하려는 성격(같은 입력에는 항상 같은 출력) 즉 객체지향은 상태를 기록하여 바꾸는 것을 강조, 함수형은 상태를 기록하지 않고 함수의 응용을 강조(대부분 람다 함수를 이용) 2. 비교 1) 함수형 언어는 side effet를 제거 (* side effect : 반환값 이외에 호출된 함수 밖에서 관찰할 수 있는 애플리케이션 상태 변화.. 콘솔로그 띄우기) 즉, 프로그램을 더욱 쉽게 이해하고..
접근 제한자 헝용 범위 private : 같은 클래스 fileprivate : 같은 소스 파일(.swift) internal : 같은 모듈(framework) or 같은 프로젝트 public : 모듈 외부까지 가능 open : 모듈 외부, 상속 및 override가능(확장 가능) 선언하지 않을시 디폴트는 internal 접근 제한자 * 더 구체적인 설명 참고: https://ios-development.tistory.com/644?category=989689 [iOS - swift 공식 문서] 26. Access Control (접근제한) Access Control 다른 소스 파일 또는 모듈의 코드에서 코드 부분에 대한 엑세스를 제한 코드의 구현 세부 정보를 숨기고 해당 코드에 엑세스하고 사용할 수 있는..
let b = Boo() 원래의 의미는 "let b = Boo.init()" 1. init의 존재 이유 - 모든 저장 프로퍼티들은 초기화 되어야 함, init키워드는 이것을 도와줌 1 2 3 4 5 6 7 8 9 10 11 class Test{ var a:Int! // nil로 초기화 var b:Int? // nil로 초기화 var c: Int // init으로 초기화 var d: Int // error init(tmp: Int){ self.c = tmp } } (d변수가 초기화 되지 않아서 error) 2. 초기화의 종류 1) 초기화 메소드의 델리게이션: super.init() (연쇄적인 초기화) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class A{ va..
1. 예외 처리 필요한 이유 - optional타입은 오류가 발생했을 때 오류에 대한 정보를 외부로 전달할 방법이 없음 2. 구현 방법 - 함수가 반환할 오류는 일관된 주제와 연관된 경우(문자열이 있을 때, 문자열 크기, 문자열 형식, 문자열 포멧형식 등의 체크) - 일관된 주제를 표현하기에 가장 좋은 것은 enum형 타입 1) enum에 오류타입명 정의 // enum형으로 error타입명 정의 ( 프로토콜을 구현한 것은 오류 타입으로 사용하라는 일종의 가독성 표시 ) enum DateParseError : Error { case overSizeString case incorrectData(part: String) } 2) 오류가 나는 조건을 명시 : throws와 throw로 선언 - 오류가 발생할 수..
1. Delegate Pattern : 프로토콜을 쓰는 대표적인 이유 - 각종 이벤트를 효율적으로 관리하기 위해 대리자를 지정하여 이벤트 처리를 위임하고, 이벤트 발생시 위임된 대리자가 콜백 메소드를 호출하는 설계 패턴 * protocol : 명세 - protocol입장에서 구현 하는 객체가 어떤 객체인지 상관없고, "날 구현하여 특정 일을 시행하라"라는 의미 - 클래스는 단일 상속이기때문에 protocol이 나온 것 2. 프로토콜 생성 1) 프로토콜 프로퍼티 : 연산 프로퍼티만 가능하며 get, set유무만 표현 2) 프로토콜 메소드 : 구현부만 빼고 그대로 작성 1 2 3 4 5 6 7 8 9 10 11 // 프로토콜 프로퍼티 protocol myProtocol { var a: String {get ..
1. 열거형 - 열거형을 이용하여 데이터 타입을 정의하면 컴파일 오류로 찾아내는데 용이 ( 배열과 같은 집단 자료형은 런타임 오류 발생) 1) 사용방법 1 2 3 4 5 6 7 8 9 enum MyEnum { case ABC case B case C, D } let a = MyEnum.ABC print(a) // ABC let b: MyEnum = .B // 열거형을 선언시, 생략하여 사용 가능 - 타입이 지정된 enum : 값에 접근하는 경우는 rawValue로 접근 1 2 3 4 5 6 7 8 9 10 enum MyEnum: Int { case ABC = 123 case B = 2 case C = 4 } let a: MyEnum = .ABC print(a) // ABC print(a.rawValue)..
1. 특성 - 단일 상속만 지원 ※ protocol은 다중 구현 가능 1 2 3 4 5 6 7 8 import UIKit class C1{ } class C2: C1, UIContentContainer, UIAppearanceContainer{ // 다중 구현한 protocol과 단일 상속한 C1구별 } 2. 오버라이딩 - override키워드 붙임 - 메서드 뿐만 아니라 연산프로퍼티 변수 또한 오버라이딩 가능 - 수정 할 수 있는 변수로 하려면 역시, set키워드 넣을 것 - didSet, willSet이용 가능 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import UIKit class Machine{ var name: String = ..
1. 구조체와 클래스의 차이 - 클래스만이 가지고 있는 특성 : 상속, 타입 캐스팅, 소멸화 구문, 참조에 의한 전달 - 구조체만이 가지고 있는 특성 : Memberwise Initializer ( 모든 인자값을 받고 초기화 해주는 구문을 자동으로 생성) 1 2 3 4 5 6 7 8 9 10 struct MyStruct{ var a : Int = 1 var b : Int = 2 func f () -> () { } } MyStruct() // 기본 초기화 MyStruct(a: 1, b: 2) // 모든 인수 초기화 - 구조체는 값에 의한 복사이고 클래스는 주소를 넘겨줌 - 클래스는 메서드에서 멤버변수를 바꿀 수 있지만, 구조체는 메서드에서 멤버변수에 있는 값을 바꾸려면 mutating 키워드를 사용해야함 ..