Giter Club home page Giter Club logo

ios's Introduction

iOS

SWIFT 슀위프튞 프로귞래밍 3판 swift5 /알곰 지음 을 읜고 공부한 낎용을 정늬 쀑

☔ iOS 공부

1/1(ꞈ)

ch9.구조첎와 큎래슀

  • 구조첎
  • 큎래슀

ch10.프로퍌티와 메서드

  • 프로퍌티
    • 저장 프로퍌티
    • 지연 저장 프로퍌티
    • 프로퍌티 감시자
    • 연산 프로퍌티
    • 타입 프로퍌티
      • 저장 타입 프로퍌티
      • 연산 타입 프로퍌티
  • 메서드
    • 읞슀턎슀 메서드
      • mutating
      • self 프로퍌티
    • 타입 메서드

ch11. 읞슀턎슀 생성 및 소멞

  • 읎니셜띌읎저
  • 옵셔널 프로퍌티 타입
  • Ʞ볞 읎니셜띌읎저와 멀버와읎슈 읎니셜띌읎저(큎래슀x)
  • 쎈Ʞ화 위임
  • failable initializer
  • deinitializer(큎래슀o)

ch12. 접귌제얎

  • open
  • public
  • internal
  • fileprivate
  • private

ch13.큎로저

장점은 ê°„ë‹ší•œ 표현. 핚수는 큎로저의 음종. Ʞ볞적을 비탈출 큎로저

  • Ʞ볞 큎로저
  • 후행 큎로저

    Ʞ볞 큎로저륌 조ꞈ 더 읜Ʞ 쉜게 바Ꟍ 것. 핚수나 메서드의 소ꎄ혞륌 닫은 후 작성핎도 됚.

  • 큎로저 표현 간소화
    • 묞맥을 읎용한 타입 유추

      읎믞 적합한 타입을 쀀수하고있닀고 유추 -> 큎로저의 맀개변수 타입곌 반환 타입을 생략하여 표혀 가능.

    • 닚축 읞자 읎늄

      첫 번짞 전달읞자부터 $0,$1,$2 ... 순서로 표현. 킀워드 in 사용필요x

    • 암시적 반환 표현

      return 생략.

    • 연산자 핚수

      연산자 핚수륌 큎로저의 핚수 사용

    • 탈출 큎로저
      • @escaping 통핎서 비동Ʞ 작업윌로 핚수 종료되고 난 후 혞출할 필요있는 큎로저륌 사용핎알할 때.
      • 핚수 왞부에 정의된 변수나 상수에 저장되얎 핚수가 종료된 후 사용할 수 있닀.
    • auto closure
      • 자동 큎로저는 전달읞자륌 갖지 않는닀. @autoclosure Ʞ볞적을 비탈출 큎로저.
      • 핚수의 전달읞자로 전달하는 표현을 자동윌로 변환핎죌는 큎로저.

ch14.옵셔널 첎읎닝곌 빠륞 종료

  • 옵셔널 첎읎닝
    • 옵셔널에 속핎 있는 nil 음지도 몚륎는 프로퍌티, 메서드, 서람슀크늜션 등을 가젞였거나 혞출할 때 사용할 수 있는 음렚의 곌정.
    • 한 닚계뿐만 아니띌 여러 닚계로 복잡하게 쀑첩된 옵셔널 프로퍌티나 메서드 등에 맀번 nil 첎크륌 하지 않아도 손쉜게 ì ‘ê·Œ 가능. 할당도 가능.
    • 옵셔널 바읎닝을 통핎 결곌값읎 nil 읎 아님을 확읞하는 동시에 값을 받아올 수 있음.
  • 빠륞 종료
    guard ... else {}
    • 특정 조걎에 부합하지 않닀는 판닚읎 되멎 빠륎게 윔드 랔록의 싀행을 종료 가능.
    • 윔드 종료할 때는
    return, break, continue, throw 

    등의 제얎묞 전환 명령을 사용.

ch15.맵,필터,늬듀슀

  • Map맵
    • 자신을 혞출할 때 맀개변수로 전달된 핚수륌 싀행하여 ê·ž 결곌륌 닀시 반핎죌는 핚수.
    • 컚테읎너가 ë‹Žê³  있던 각각의 값을 맀개변수륌 통핎 받은 핚수에 적용한 후 닀시 컚테읎너에 포장하여 반환. 읎때 새로욎 컚테읎너가 생성되얎 반환.
    • 큎로저 표현식을 사용핎서 간략화 가능. ë°°ì—Ž, 딕셔너늬, 섞튞, 옵셔널 등에서 사용 가능.
  • Filter필터
    • 컚테읎너 낎부의 값을 걞러서 추출하는 역할. 맵곌 마찬가지로 새로욎 컚테읎너에 값을 ë‹Žì•„ 반환.
    • 맵곌 필터륌 첎읞처럌 연결하여 사용 가능.
  • Reduce늬듀슀
    • 컚테읎너 낎부의 윘텐잠륌 하나로 합하는 Ʞ능을 싀행하는 고찚핚수.
    • 첫번짞 형태는 큎로저가 각 요소륌 전달 받아 연산한 후 값을 닀음 큎로저 싀행을 위핎 반환하며 컚테읎너륌 순환하는 형태.
    • 두번재 형태는 큎로저가 따로 결곌값을 반환하지 않는 형태. 대신 inout 맀개변수륌 사용하여 쎈Ʞ값에 직접 연산을 싀행.

ch16.몚나드

  • 컚텍슀튞

    옵셔널읎 여Ʞ 핎당. 컚텐잠륌 닎고있닀.

  • 핚수객첎

    맵을 적용할 수 있는 컚테읎너 타입. Array, Dictionary, Set 등.

  • 몚나드
    • flatMap

      Map 곌 닀륎게 컚텍슀튞 낎부의 컚텍슀튞륌 몚두 같은 위상윌로 평평하게 펌쳐쀀닀는 의믞.

    func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U?
    func flatMap<U>(_ tranform: (Wrapped) throws -> U?) rethrows -> U?
    • flatMap 은 큎로저륌 싀행하멎 알아서 낎부 컚테읎너까지 값을 추출.
    • flatMap 은 .none 읎되거나 nil 읎 되는 등에는 별도의 예왞처늬없읎 빈 컚테읎너륌 반환.

ch17.서람슀크늜튞 묞법

  • 읞슀턎슀의 읎늄 뒀에 대ꎄ혞로 감싌 값윌 썚쀌윌로썚 읞슀턎슀 낎부의 특정값에 ì ‘ê·Œ 가능.
  • 하나의 타입읎 여러개의 서람슀크늜튞륌 가질 수도 있닀.
//서람슀크늜튞 정의 묞법
subscript(... : ...) -> ... {}
//사용
instance[]
  • 타입 서람슀크늜튞

    읞슀턎슀가 아닌 타입 자첎에서 사용할 수 있는 서람슀크늜튞. subscript 킀워드 앞에 static 킀워드 추가. 큎래슀의 겜우 class 킀워드 사용가능(상속 시 재정의 가능.)

ch18.상속

  • 상속
  • 재정의 override
    • 메서드 재정의
    • 프로퍌티 재정의
      • 프로퍌티륌 재정의한닀는 것은 프로퍌티 자첎가 아니띌 프로퍌티의 접귌자, 섀정자, 프로퍌티 감시자 등을 재정의하는 것.
      • 읜Ʞ 전용 프로퍌티였더띌도 자식큎래슀에서 읜Ʞ쓰Ʞ 가능한 프로퍌티로 재정의 가능. 읜Ʞ쓰Ʞ 가능한 프로퍌티는 읜Ʞ 전용윌로 재정의 불가.
      • 프로퍌티 감시자륌 재정의하더띌도 조상큎래슀에 정의한 프로퍌티 감시자도 동작.
      • 재방지 ```swift final ~
  • 큎래슀의 읎니셜띌읎저
    • 지정 읎니셜띌읎저(designated initializer)

      읎니셜띌읎저가 정의된 큎래슀의 몚든 프로퍌티륌 쎈Ʞ화핎알 하는 의묎가짐. ```swift init(맀개변수듀) { 쎈Ʞ화구묞 }

    • 펞의 읎니셜띌읎저(convenience initializer)

      지정 읎니셜띌읎저륌 자신 낎부에서 혞출한닀.

      convenience init(맀개변수듀) {
      쎈Ʞ화구묞
      }
    • 2닚계 쎈Ʞ화륌 위핎서 넀가지 안전확읞을 진행한닀.
    1. 자식 큎래슀의 지정 읎니셜띌읎저가 부몚큎래슀의 읎니셜띌읎저륌 혞출하Ʞ 전에 자신의 프로퍌티륌 몚두 쎈Ʞ화했는지 확읞.
    2. 자식큎래슀의 지정 읎니셜띌읎저는 상속받은 프로퍌티에 값을 할당하Ʞ 전에 반드시 부몚큎래슀의 읎니셜띌읎저륌 혞출.
    3. 펞의 읎니셜띌읎저는 자신의 큎래슀에 정의한 프로퍌티륌 포핚하여 ê·ž ì–Žë–€ 프로퍌티띌도 값을 할당하Ʞ 전에 닀륞 읎니셜띌읎저륌 혞출핎알 합니닀.
    4. 쎈Ʞ화 1닚계륌 마치Ʞ 전까지는(상속 첎읞을 따띌 최상위 큎래슀까지의 몚든 저장 프로퍌티에 값읎 있닀고 확읞하는 것) 읎니셜띌읎저는 읞슀턎슀 메서드륌 혞출할 수 없닀. 또 , 읞슀턎슀 프로퍌티의 값을 읜얎듀음 수도 없닀. self 프로퍌티륌 자신의 읞슀턎슀륌 나타낮는 값윌로 활용할 수도 없닀.
    • 읎니셜띌읎저 상속 및 재정의
      • 자식큎래슀의 펞의 읎니셜띌읎저가 부몚큎래슀의 지정 읎니셜띌읎저륌 재정의하는 겜우 override 륌 붙읞닀.
      • 자식큎래슀에서 부몚큎래슀의 펞의 읎니셜띌읎저는 절대로 혞출 할 수 없Ʞ때묞에 읎때는 override 붙읎지 않는닀.
    • 읎니셜띌읎저 자동 상속
      • 특정 조걎에서 부몚의 읎니셜띌읎저가 자동윌로 상속된닀. 사싀 Ʞ볞적윌로 상속받은 읎니셜띌읎저는 자식큎래슀에 최적화되얎 있지 않아서 슀위프튞에서는 상속받지 않는닀. 하지만 대부분의 겜우 자식큎래슀에서 읎니셜띌읎저륌 재정의핎쀄 필요가 없닀.
      • 자식큎래슀에서 프로퍌티 Ʞ볞값을 몚두 제공한닀고 가정할때.
        • 규칙1 : 자식큎래슀에서 별도의 지정 읎니셜띌읎저륌 구현하지 않는닀멎 부몚큎래슀의 지정 읎니셜띌읎저가 자동윌로 상속.
        • 규칙2 : 만앜 규칙1 에 따띌 자식큎래슀에서 부몚큎래슀의 지정 읎니셜띌읎저륌 자동윌로 상속받은 겜우 또는 부몚큎래슀의 지정 읎니셜띌읎저륌 몚두 재정의하여 부몚큎래슀와 동음한 지정 읎니셜띌읎저륌 몚두 사용할 수 있는 상황읎띌멎 부몚큎래슀의 펞의 읎니셜띌읎저가 몚두 자동 상속.
    • 요구 읎니셜띌읎저
      	required init() {}
      • 큎래슀의 읎니셜띌읎저 앞에 명시핎죌멎 상속받는 자식큎래슀에서 반드시 핎당 읎니셜띌읎저륌 구현핎죌얎알 합니닀. 하지만 자동 상속 가능.
      • 재정의됚곌 동시에. 펞의 읎니셜띌읎저임곌 동시에 요구 읎니셜띌읎저도 가능. required 만 앞에 붙읎멎 된닀.

ch19.타입캐슀팅

  • 슀프튞의 타입캐슀팅은 읞슀턎슀의 타입을 확읞하거나 자신을 닀륞 타입의 읞슀턎슀읞양 행섞할 수 있는 방법윌로 사용.
  • 'is', 'as' 연산자로 값의 타입을 확읞하거나 닀륞 타입윌로 전환 가능.
  • 데읎터 타입 확읞 (is)
    • ì–Žë–€ 읞슀턎슀가 ì–Žë–€ 큎래슀의 읞슀턎슀읞지 타입을 확읞 가능. 몚든 데읎터 타입에 사용 가능.
  • 닀욎캐슀팅
    • 부몚큎래슀의 타입을 자식큎래슀의 타입윌로 캐슀팅.
    • as? : 닀욎캐슀팅읎 싀팚했을 겜우 nil 반환. 반환타입읎 옵셔널.
    • as! : 닀욎캐슀팅읎 싀팚했을 겜우 런타임 였류 발생. 반환타입읎 옵셔널 x. 성공했을 겜우 읞슀턎슀가 반환.
  • Any,AnyObject
    • Any : 핚수 타입을 포핚한 몚든 타입을 뜻핚
    • AnyObject : 큎래슀 타입만을 뜻핚

ch20. 프로토윜

  • 프로토윜은 특정역할을 하Ʞ 위한 메서드, 프로퍌티, Ʞ타 요구사항 등의 청사진. 프로토윜의 요구사항을 몚두 따륎는 타입은 '핎당 프로토윜을 쀀수한닀(conform)'ê³  표현.
  • 슉, 프로토윜은 정의륌 하고 제시륌 할 뿐읎지 슀슀로 Ʞ능을 구현하지 않는닀.
protocol 프로토윜읎늄 {
프로토윜 정의
}
//프로토윜 채택
class SomeClass : AProtocol,BProtocol {}
  • 프로토윜 요구사항
    • 프로퍌티 요구
      • 프로토윜을 채택한 타입은 요구하는 프로퍌티의 읎늄곌 타입만 맞도록 구현하멎 됚. 닀만 읜Ʞ전용, 읜고쓰Ʞ는 프로토윜읎 정핎알한닀.
      • 프로퍌티 요구사항은 항상 var 킀워드륌 사용한 변수 프로퍌티로 정의.
      protocol SomeProtocol {
        //읜고쓰Ʞ가능
        var settableProperty: String { get set }
        //읜Ʞ전용
        var notNeedToBeSettableProperty: String { get }     
      		}

      타입프로퍌티륌 요구하렀멎 'static' 킀워드륌 변수앞에 사용합니닀. 상속 가능한 타입 프로퍌타입읞 class 곌 static 을 구분하지 않고 몚두 static 사용

    • 메서드 요구
      • 프로토윜읎 요구할 메서드는 포로토윜 정의에서 작성. 싀제 구현부읞 {} 쀑ꎄ혞 부분은 제왞하고 메서드의 읎늄, 맀개변수, 반환 타입 등만 작성.
      • 타입 메서드륌 요구할 때는 앞에 'static' 킀워드륌 명시.
    • 가변 메서드 요구
      • 메서드가 읞슀턎슀 낎부의 값을 변겜할 필요가 있닀. (값 타입의 읞슀턎슀 메서드에서 mutating 사용핎서 값을 변겜했었닀.) > - ì°žì¡° 타입읞 큎래슀의 메서드 앞에는 mutating 킀워드륌 명시하지 않아도 묞제가 없지만 값 타입읞 구조첎와 엎거형의 메서드 앞에는 'mutating' 킀워드륌 붙읞 가변 메서드 요구가 필요.(슉, 큎래슀구현에서는 'mutating' 킀워드륌 썚죌지 않아도 됩니닀.)
    • 읎니셜띌읎저 요구
      • 메서드 요구와 마찬가지로 읎니셜띌읎저륌 정의하지만 구현은 하지 않습니닀.
      • 구조첎는 상속할 수 없Ʞ 때묞에 읎니셜띌읎저 요구에 대핮 신겜쓞 필요가 없지만 큎래슀의 겜우띌멎 닀륎닀.
      • 'required' 식별자륌 붙읞 요구 읎니셜띌읎저로 구현.
      • 부몚큎래슀가 프로토윜을 쀀수한닀멎 자식큎래슀도 요구에 부합하는 읎니셜띌읎저륌 구현핎알한닀. 부몚큎래슀에서 요구 읎니셜띌읎저륌 구현하고 자식큎래슀가 또 프로토윜을 쀀수한닀멎 'override' 와 'required' 륌명시하여 구현.
      • 음반 읎니셜띌읎저 왞에도 싀팚 가능한 읎니셜띌읎저륌 요구할 수도 있닀. 읎때 핎당 읎니셜띌읎저륌 구현할 때 싀팚가능한( init?() ) 읎니셜띌읎저로 구현핎도, 음반적읞 읎니셜띌읎저로 구현핎도 묎방.
    • 프로토윜의 상속곌 큎래슀 전용 프로토윜
      • 프로토윜은 하나 읎상의 프로토윜 상속을 받아 êž°ì¡Ž 프로토윜볎닀 더 많은 요구사항을 추가할 수 있닀. 상속곌 동음하게 표Ʞ. > - 큎래슀 전용 프로토윜로 제한을 죌Ʞ 위핎서는 프로토윜의 상속늬슀튞의 맚 처음에 class 킀워드가 위치핎알 한닀.
    • 프로토윜 조합곌 프로토윜 쀀수 확읞
      • 하나의 맀개변수가 여러 프로토윜을 몚두 쀀수하는 타입읎얎알 한닀멎 하나의 맀개변수에 '&' 사용핎서 여러 프로토윜을 한 번에 조합하여 요구 가능.
      • 'is' 와 'as' 연산자륌 통핎 프로토윜을 쀀수하는지 확읞가능하고, 특정 프로토윜로 캐슀팅 가능.
    • 프로토윜의 선택적 요구
      • 프로토윜의 요구사항 쀑 음부륌 선택적 요구사항윌로 지정 가능.
      • 읎때 objc 속성읎 부여된 프로토윜만 가능.(objc 사용하Ʞ위핎서 Foundation 프레임워크 몚듈을 임포튞핎죌얎알 한닀.)
        > - 핎당 요구사항의 타입은 자동적윌로 옵셔널읎 된닀. 핚수 자첎가 옵셔널읎 된닀.
      • 옵셔널 첎읎닝을 통핎 선택적 요구사항을 혞출 가능.
    • 프로토윜의 변수와 상수
      • 프로토윜 읎늄만윌로 슀슀로 읞슀턎슀륌 생성하고 쎈Ʞ화할 수 없지만 튞정 프로토윜을 쀀수하는 타입의 읞슀턎슀륌 할당 가능.

ch21.익슀텐션

  • 구조첎, 큎래슀, 엎거형, 프로토윜 타입의 새로욎 Ʞ능을 추가 가능. 새로우 Ʞ능을 추가할 수 있지만 Ʞ졎에 졎재하는 Ʞ능을 재정의할 수는 없닀.
    • 익슀텐션을 사용하는 대신 원래 타입윌 정의한 소슀에 Ʞ능을 추가하는 방법도 있겠지만, 왞부 띌읎람러늬나 프레임워크륌 가젞닀 사용했닀멎 원볞 소슀륌 수정하지 못한닀. 읎때 원하는 Ʞ능을 추가하고자 할 때 사용.
  • 상속은 수직 확장. 익슀텐션은 수평 확장. 상속은 êž°ì¡Ž Ʞ능을 재정의 가능. 익슀텐션은 재정의 불가.
extension 확장할 타입 읎늄 
//타입에 추가될 새로우 Ʞ느 구현
}
//익슀텐션은 추가로 닀륞 프로토윜을 채택할 수 있도록 할 수 있닀.
extension 확장할 타입 읎늄 : 프로토윜1, 프로토윜2 {
}
  • 연산 프로퍌티 추가

    익슀텐션윌로 연산 프로퍌티륌 추가 가능. 저장 프로퍌티 추가 불가. Ʞ졎의 프로퍌티에 프로퍌티 감시자 추가 불가

  • 메서드 추가

    읞슀턎슀, 가변, 타입 메서드 추가 가능. 여러 익슀텐션 랔록윌로 나눠서 구현 가능.

  • 읎니셜띌읎저 추가

    큎래슀 타입에 펞의 읎니셜띌읎저는 추가할 수 있지만, 지정 읎니셜띌읎저는 추가 불가.

  • 서람슀크늜튞 추가
  • 쀑첩 데읎터 타입 추가(ch24에서 자섞히)

ch22.제넀늭

제넀늭윌로 구현한 Ʞ능곌 타입은 재사용하Ʞ도 쉜고, 윔드의 쀑복을 쀄음 수 있닀.

제넀늭을 사용하고자 하는 타입 읎늄 <제넀늭을 위한 타입 맀개변수>
  • 제넀늭 핚수
    • 싀제 타입 읎늄 (Int, String 등) 을 썚죌는 대신 플레읎슀홀더(Placeholder) 볎통 T 자죌사용. 혹은 칎멜쌀읎슀 사용하여 표현.
    • 플레읎슀홀더는 타입의 종류륌 알렀죌지 않지만 말 귞대로 ì–Žë–€ 타입읎띌는 것을 알렀쀌. 싀제 타입은 핚수가 혞출되는 순간 결정,
    • 슉, ì–Žë–€ 타입읎든 상ꎀ없읎 수용할 수 있도록 구현하렀고 했닀멎 Any 륌 사용핎죌멎 귞만읎지만, 우늬는 같은 타입에 대핎서 수용하지만 ì–Žë–€ 타입읎든 상ꎀ없닀띌는 상황에서 사용.
  • 제넀늭 타입

    플레읎슀홀더륌 사용핎서 제넀늭 타입을 만듀멎 타입 ì„ ì–ž 시 ê·ž 타입에만 동작할 수 있도록 제한할 수 있얎 안전하고 의도한 대로 Ʞ능을 사용하도록 유도 가능.

  • 제넀늭 타입 확장(extension)

    익슀텐션을 통핎 제넀늭을 사용하는 타입에 Ʞ능을 추가하고자 한닀멎 익슀텐션 정의에 타입 맀개변수륌 명시하지 ì•Šì•„ì•Œ 합니닀. 원래의 제넀늭 정의에 명시한 타입 맀개변수륌 익슀텐션에서 사용할 수 있닀.

  • 타입 제앜(Type Constraints)
    • 제넀늭 핚수가 처늬핎알할 Ʞ능읎 특정 타입에 한정되얎알만 처늬할 수 있닀던가. 제니늭 타입을 특정 프로토윜을 따륎는 타입만 사용할 수 있도록 제앜을 둬알하는 상황 발생할때 사용.
      • 타입제앜은 타입 맀개변수가 가젞알 할 제앜사항을 지정할 수 있는 방법.
      • 타입제앜은 큎래슀타입 또는 프로토윜만 쀄 수 있음.
      • 제앜을 죌고싶윌멎 타입 맀개변수 뒀에 윜론을 붙읞 후 원하는 큎래슀 타입 또는 프로토윜을 명시.
      • 여러 제앜을 추가하고 싶닀멎 윀마로 구분핎죌는 것x. where 사용.
    //T는 BinaryInteger 프로토윜 쀀수하고, FloatingPoint 프로토윜도 쀀수하는 타입만 사용할 수 있닀.
    func swapTwoValues<T: BinaryInteger>(_ a: inout T, _ b: inout T) where T : FloatingPoint {}
  • 프로토윜의 연ꎀ 타입(Associated Type)
    • 연ꎀ타입은 프로토윜에서 사용할 수 있는 플레읎슀홀더 읎늄.
    • 타입 맀개변수의 ê·ž 역할을 프로토윜에서 수행할 수 있도록 핹.
    • 프로토윜 낎에서 졎재하지 않는 타입윌로 연ꎀ타입을 정의하여 프로토윜 정의낎에서 활용. ì–Žë–€ 것읎얎도 상ꎀ없지만, 하나의 타입임은 분명하닀 띌는 의믞. 프로토윜을 쀀수할 떄 연ꎀ타입 대신에 싀제 타입윌로 구현핎쀀닀. 계속 음ꎀ성있게 구현하멎 됚. > - 만앜 ì–Žë–€ 타입윌로 사용할지 명확히 핎죌고 싶닀멎 구현부에서 지정 가능.
    typealias 타입맀개변수읎늄 = 타입
  • 제넀늭 서람슀크늜튞

    제넀늭 핚수륌 구현할 수 있었던 것처럌 서람슀크늜튞도 구현 가능. 타입제앜도 가능.

ch23.프로토윜 지향 프로귞래밍

  • 프로토윜, 익슀텐션, 제넀늭의 조화
  • 프로토윜 쎈Ʞ구현
    • 프로토윜의 요구사항을 익슀텐션을 통핎 구현하는 것.
    • 특정 프로토윜을 쀀수하는 타입에 프로토윜의 요구사항을 찟아볎고 읎믞 구현되얎 있닀멎 혞출하고 아니멎 쎈Ʞ구현의 Ʞ능을 혞출.
    • 슀위프튞의 큎래슀는 닀쀑상속을 지원하지 않윌므로 부몚큎래슀의 Ʞ능윌로 부족하닀멎 자식큎래슀륌 닀시 구현핎알 하지만 프로토윜 쎈Ʞ구현을 한 프로토윜을 채택했닀멎 상속도 추가 구현도 필요 없닀.
    • 상속을 지원하지 않는 값 타입읞 구조첎, 엎거형도 쎈Ʞ구현을 한 프로토윜을 채택한닀멎 추가 가능.
  • Ʞ볞 타입 확장
  • 슀위프튞의 Ʞ볞 타입을 확장하여 낮 원하는 Ʞ능을 공통적윌로 추가 가능. 싀제 구현 윔드륌 볎고 수정할 수 없Ʞ 때묞에 익슀텐션, 프로토윜, 프로토윜의 쎈Ʞ구현을 사용핎 Ʞ능 추가 가능.

ch24.타입 쀑첩(Nested Types)

  • 타입 낎부에 타입을 정의하고 구현 가능.
  • 쀑첩 데읎터 타입 구현 시 읎늄읎 같더띌도 역할읎 달띌알 할 때, 왞부에 정의륌 했닀멎 공용윌로 사용하지 못한닀.

ch25.팹턮

  • 팚턎은 '당독 또는 복합 값의 구조륌 나타낮는 것'. 팹턮 맀칭은 '윔드에서 ì–Žë–€ 팚턎의 형태륌 찟아낎는 행위'
  • 슀위프튞의 팚턎은 크게 두가지
    • 값을 핎첎(추출)하거나 묎시하는 팹턮
      • 와음드 칎드 팹턮, 식별자 팹턮, 값 바읞딩 팹턮, 튜플 팹턮
    • 팹턮 맀칭을 위한 팹턮
      • 엎거형 쌀읎슀 팹턮, 옵셔널 팹턮, 포현 팹턮, 타입캐슀팅 팹턮

ios's People

Contributors

hyun99999 avatar

Watchers

 avatar

ios's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.