일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- user
- switch
- consumer
- borderRadius
- globalkey
- controller
- transform
- changenotifier
- Swift
- Camera
- setstate
- Navigator
- Stream
- ListView.builder
- permission
- signout
- reference
- enum
- platformexception
- Snapshot
- Firebase
- swift 문법
- provider
- snackbar
- divider
- changenotifierprovider
- multiprovider
- datetime
- runTransaction
- 문법
- Today
- Total
목록Swift (18)
코딩하는 제리
- 모든 클래스들의 프로퍼티들은 초기화 과정에서 반드시 값이 할당되어야 한다. (상속 받은 클래스가 있는 경우는 상위 클래스들의 프로퍼티도 모두 초기 값이 할당되어야 함.) 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..
- 기능은 같고 매개변수형(파라미터 데이터 타입)만 다른 함수 // 제너릭 명은 자유롭게 변경 가능하나 보통 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..
- .(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)// 값에도 바로 사용가능
class Man { var age: Int = 1 var weight: Double = 3.5 func display() { print("\(age), \(weight)") } init(age: Int, weight: Double) { self.age = age self.weight = weight } } class Student: Man { // 비어있지만 Man의 모든 것을 가지고 있음. } var people: Man = Man(age: 10, weight: 20.5) people.display() // 비어있는 Student 클래스 객체 생성 var jerry: Student = Student(age: 20, weight: 60.0) jerry.display()// 부모 클래스의 메서드 prin..
- 매개변수의 개수와 자료형이 다른 같은 이름의 함수를 여러 개 정의 - 매개변수가 다른 두 생성자를 통해 두가지 방법으로 인스턴스를 만들 수 있음 class Man { var age: Int = 1 var weight: Double = 3.5 // 첫번째 생성자 init(age: Int, weight: Double) { self.age = age self.weight = weight } // 두번째 생성자 init(age: Int) { self.age = age } } var people: Man = Man(age: 10, weight: 20.5) // 첫번째 생성자 var people: Man = Man(age: 10) // 두번째 생성자