일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- datetime
- provider
- ListView.builder
- transform
- Swift
- divider
- setstate
- borderRadius
- Firebase
- Navigator
- reference
- controller
- Stream
- changenotifier
- signout
- consumer
- changenotifierprovider
- globalkey
- platformexception
- permission
- user
- 문법
- runTransaction
- multiprovider
- swift 문법
- enum
- Camera
- snackbar
- Snapshot
- switch
- Today
- Total
목록iOS/SwiftUI (25)
코딩하는 제리
- 모든 클래스들의 프로퍼티들은 초기화 과정에서 반드시 값이 할당되어야 한다. (상속 받은 클래스가 있는 경우는 상위 클래스들의 프로퍼티도 모두 초기 값이 할당되어야 함.) Designated initializer (지정 초기화) 1. 클래스의 모든 프로퍼티를 초기화 해야함. 2. 클래스 타입은 반드시 한 개 이상의 지정 초기화가 필요. 3. 초기화가 끝나기 전에 다르 메서드 호출 불가. 4. 소멸자 a. 인스턴스가 사라질 때 자동 호출 - deinit{} class Man { var age: Int var weight: Double func display() { print("\(age), \(weight)") } // designated initializer init(yourAge: Int, yourW..
- Delegation(위임)은 클래스나 구조체가 일부 책임을 다른 유형의 인스턴스로 전달 할 수 있도록 하는 디자인 패턴. - 위임된 기능은 프로토콜에서 정의하며, delegate가 위임된 기능을 제공. - 위임은 특정 작업에 응답하거나 외부에서 데이터를 가져오는데 사용. - 하나의 객체가 모든 일을 처리하는 게 아니라 처리해야 할 일 중 일부를 다른 객체에 넘기는 것. - 보통 프로토콜을 사용. - ViewController 클래스는 부모 UIViewController를 상속받고, UIPickerView형의 인스턴스 pickerImage 선언. class ViewController: UIViewController { @IBOutlet var pickerImage: UIPickerView! - 피커뷰 ..
- 기능은 같고 매개변수형(파라미터 데이터 타입)만 다른 함수 // 제너릭 명은 자유롭게 변경 가능하나 보통 T로 사용 func swapAny(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp } // Int형 var x = 10 var y = 20 swapAny(&x, &y) // Double형 var xd = 10.3 var yd = 20.7 swapAny(&xd, &yd) // String형 var xd = "Hi" var yd = "Hello" swapAny(&xs, &ys) struct IntStack { var items = [Int]() // 배열 선언 mutating func push(_ item: Int) { items.appned(i..
- 런타임 시 오류를 발견하여 응답하고 복구하는 과정. - 스위프트에서는 옵셔널을 사용하여 값의 유무를 전달함으로써 작업의 성공/실패 유무를 판단할 수 있지만 - 작업이 실패할 때 코드가 적절히 응답할 수 있도록 함으로써 오류의 원인을 이해하는데 도움을 줌. - 예로 디스크상의 파일을 처리하는 작업에서 '존재하지 않는 파일', '읽기 권한 없음' 등 오류가 발생할 수 있다. - 매개변수 괄호 다음에 throws라는 키워드가 있는 함수는 그냥 사용할 수 없고 error handling을 해야한다. - 하지 않으면 Call can throw, but it is not marked with 'try' and the error is not handled 오류 발생 - 자동완성 기능 사용하면 됨. // do~tr..
- .(dot)을 통해 내부 프로퍼티나 메서드에 연속적으로 접근할 때 옵셔널 값이 하나라도 껴 있으면 옵셔널 체이닝. - 옵셔널 표현식의 멤버에 접근할 때, 표현식이 nil일 수 있으니 ?를 써줌. - jerry?.contacts.email 에서 단 하나의 표현식이라도 nil이라면 nil을 반환함. 옵셔널 체이닝 특징 1. 옵셔널 체이닝 결과값의 타입은 마지막 표현식의 옵셔널 타입이다. a. email에 닿기 전에 jerry가 nil이면 그냥 nil을 반환하기 때문에 무조건 옵셔널 타입이다. 2. 옵셔널 체이닝의 마지막 표현식은 옵셔널이라도 ?를 생략한다. 3. 옵셔널 체이닝의 표현식 중 하나라도 nil이라면, 이어지는 표현식은 평가하지 않고 nil을 리턴. 4. 함수가 끼어있는 옵셔널 체이닝 a. 함수..
- 클래스, 구조체, 열거형에 프로토콜을 채택 할 수 있음. class 클래스명: 부모 클래스명, 프로토콜명 {} class 클래스명: 부모 클래스명, 프로토콜명1, 프로토콜명2 {} class 클래스명: 프로토콜명 {} class 클래스명: 프로토콜명1, 프로토콜명2 {} protocol 프로토콜명 { 프로퍼티명 메서드선언// 메서드는 선언만. } protocol 프로토콜명: 다른프로토콜1, 다른프로토콜2 { // 다중 상속 가능 } protocol SomeProtocol { var x: Int { get set }// 읽기/쓰기 가능 var y: Int { get }// 읽기 전용 static var tx: Int { get set } static func typeMethod()// 메서드는 선언만...
open/public - 모듈의 모든 소스 파일내에서 사용할 수 있음. - 정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 사용 가능. - 일반적으로 Framework에 공용 인터페이스를 지정할 때 사용. - open 접근은 클래스 및 클래스 멤버에만 적용 됨. internal - 해당 모듈의 모든 소스 파일 내에서 사용되지만, 해당 모듈 외부의 소스파일에서는 사용되지 않도록 함. - 일반적으로 App이나 Framework의 내부 구조를 정의할 때 사용. - 접근 제어를 생략하면 internal이 기본. fileprivate - 해당 소스 파일 내에서만 사용가능. private - 블록과 동일한 파일에 있는 해당 선언의 extension으로 제한. // 클래스 키워드 앞에 작성 open class va..
- 클래스, 구조체, 열거형, protocol에 새로운 기능을 추가. - 하위 클래스를 생성하거나 참조하지 않고 기존 클래스에 메서드, 생성자, 계산 프로퍼티 등의 기능을 추가하기 위해 사용. - built-in 클래스와 iOS 프레임워크에 내장된 클래스에 기능을 추가할 때 사용하면 매우 효과적. extension 기존타입이름 { // 새로운 기능 } // 표준 자료형 Double 구조체에 두 배의 값을 반환하는 프로퍼티 추가. extension Double { var squared: Double { return self * self } } let myValue: Double = 3.0 print(myValue.squared)// 9.0 print(3.0.squared)// 값에도 바로 사용가능