목록ios (7)
조앤의 기술블로그
속성 감시자(Property Observer), 형식 속성(Type Property)에 대해서 알아보겠습니다. 속성의 값이 저장되기 전, 후에 호출되어 값이 변경되는지를 감시하는 속성 감시자입니다. var name: Type = DefaultValue { willSet(name) { statements //newValue } didSet(name) { statements //oldValue } } 변수 저장 속성에 속성 감시자를 만들 수 있습니다. (상수는 값을 변경할 수 없으니 감시자의 의미가 없습니다. ) 지연 저장 속성, 계산 속성에도 속성 감시자를 만들 수 없으나 예외는 존재합니다. (Subclass에서 계산속성을 오버라이딩하고 속성감시자 구현은 가능합니다. ) class Size { var wi..
저장 속성(Stored Property), 계산 속성(Computed Property)에 대해 알아보겠습니다. 저장 속성은 인스턴스에 속한 속성으로, 클래스와 구조체에서 선언 가능합니다. 즉, 인스턴스가 생성될 때마다 새로운 메모리에 저장됩니다. // Variable Stored Property var name: Type = DefaultValue // Constant Stored Property let name: Type = DefaultValue 초기값을 지정할 경우 형식추론을 할 수 있으므로 자료형을 생략할 수 있습니다. 초기값을 지정하지 않을 경우엔, 자료형을 지정해주어야 합니다. 상수 저장 속성은 초기화 이후에 값을 변경할 수 없습니다. class Member { let name: String ..
// (expr1, expr2, ...) // Tuple Member let a = (12, 34) 튜플은 2개 이상의 값을 저장할 때 사용합니다. 서로 다른 형식의 값 저장도 가능합니다. let data = ("", 200, "ok", 12.34) data의 자료형은 (String, Int, String, Double)입니다. 튜플은 선언 이후에 - 새로운 멤버를 추가할 수 없습니다. - 기존 멤버를 삭제할 수 없습니다. - 저장된 멤버의 개수는 튜플을 선언할 때 결정되고 변경할 수 없습니다. - 튜플 멤버의 값은 변경할 수 있습니다. [멤버에 접근하는 법] 튜플은 0-based Index로, Explicit Member Expression(점문법)으로 멤버에 접근할 수 있습니다. data.o // "..
클로저란, 짧고 독립적인 코드 조각(Self-contained code blocks)을 의미합니다. (자바에서는 람다라는 개념이 있습니다. ) 이름이 없는 함수라고 이해할 수도 있습니다. 그리고 함수와 클로저는 서로 호환됩니다. 기본 syntax를 보겠습니다. //#1. { (parameters) -> Return Type in Statements } //#2. { Statements } [예제 1] let a = { print("Hello, Swift") } //a() 여기서 a()를 호출하게되면 에러가 납니다. 클로저는 글로벌 scope에서는 단독으로 사용이 불가하기 때문입니다. [예제 2] let b = { (str: String) -> String in return "Hello \(str)" } ..
옵셔널 체이닝(Optional Chaining)이란, 사슬(chain)이 연결된 것처럼 옵셔널이 연달아 호출된 것을 의미합니다. 결론적으로, - 옵셔널 체이닝의 결과는 항상 옵셔널 입니다. - 옵셔널 체이닝이 포함된 표현식 중에서 하나라도 nil을 return한다면, 이어지는 표현식을 평가하지 않고 nil을 return합니다. [예제] Struct Contacts { var phone: [String: String] var address: String func printAddress() { return print(address ?? "No address") } } Struct Student { var name: String var contacts: Contacts var studentNum: Int in..
옵셔널 바인딩이란 옵셔널을 안전하게 처리하는 방법입니다. 옵셔널 값은 랩에 쌓여 있어서, 사용하기 위해서는 unwrapping하는 과정이 필요합니다. !키워드를 사용하여 forced unwrapping을 할 수 있습니다. 하지만 이 경우에는 crash가 발생할 위험이 있으므로 (옵셔널이 nil값을 가질 때) 사용에 주의해야 합니다 하지만 그렇다고 해서, 이렇게 코드를 작성하지는 않습니다. if num != nil { print(num!) } else .... //이렇게 코드를 작성하지는 않습니다. 대신 옵셔널 바인딩(optional binding)을 사용합니다. if문, while문, guard문에서 사용합니다. 기본 syntax입니다. //if 문 if let name: Type = OptionalEx..
Swift 언어의 가장 큰 특징 중 하나로, 값이 있을 수도 있고, 없을 수도 있는 것을 Optional 이라고 합니다. 예를 들어, 파일에서 읽어온 상수를 문자열에 저장한다고 할 때. - 파일에 값이 있을 수 있다. - 파일에 읽을 값이 없을 수 있다.(nil) '?' 키워드로 나타냅니다. 그리고 값이 없는 상태를 nil 이라고 나타냅니다. 옵셔널은 값이 없고, 추론할 형식이 없기 때문에 선언할 때 type을 지정해주어야 합니다. let str: String? = nil 옵셔널로 정의한 변수는 옵셔널이 아닌 변수와는 다릅니다. let optionalStr: String? = "abc" let requiredStr: String = optionalStr // 컴파일 에러 Optional 값은 '랩으로 포..