프로토콜은 메소드. 프로퍼티 그리고 기능을 게공하기 위한 적합한 것들의 청사진을 정의합니다. 프로토콜은 프로토콜의 요구사항을 준수하는 클래스, 구조체 또는 열거형에서 채택할 수 있습니다. 프로토콜의 요구사항을 만족시키는 타입을 프로토콜을 '준수(conform)'한다고 부릅니다. Protocol Syntax //선언 protocol SomeProtocol { // protocol definition goes here } //채택 struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here } //슈퍼클래스를 가지고 있으면 슈퍼클래스 부터 작성 후 프로토콜 채택 class SomeClass: SomeSuperc..
Extensions은 기존에 있던 클래스 구조체 열거형 또는 프로토콜 타입에 새로운 기능을 추가할 수 있습니다. Objective-C의 categories와 유사하며 오리지널 소스 코드와는 별개로 다른 곳에서도 덧붙여서 기능을 연장할 수 있습니다. 스위프트의 Extensions이 할 수 있는 것들 연산 인스턴스/타입 프로퍼티 추가 인스턴스/타입 메소드 정의 새로운 초기자(이니셜라이저) 제공 서브스크립트 정의 새로운 중첩 타입들 정의 및 사용 프로토콜 준수 익스텐션은 오버라이딩을 할 수 없음. Extension Syntax extension SomeType { // new functionality to add to SomeType goes here } extension SomeType: SomeProtoc..
타입 캐스팅은 인스턴스의 타입을 확인하거나 슈퍼클래스나 서브클래스의 인스턴스를 그 부모-자식 관계에 있는 다른 클래스의 인스턴스로 취급하기 위한 방법입니다. 스위프트의 타입캐스팅은 is 와 as 로 구현할 수 있습니다. 타입 캐스팅을 통해 프로토콜을 준수하는지도 확인할 수 있습니다. Defining a Class Hierarchy for Type Casting 같은 hierarchy(상속의 가계도라고 생각하면 됨)와 함께 타입 캐스팅을 사용하여 특정 클래스 인스턴스의 유형을 확인하고 해당 인스턴스를 동일한 계층 내의 다른 클래스로 캐스팅할 수 있습니다. class MediaItem { var name: String init(name: String) { self.name = name } } ////////..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/IjGkQ/btqNQwDhyb0/EkInZNyJBWia1IbMrzCtx0/img.png)
에러 핸들링은 프로그램 속 에러 상태에 반응하고 복구하기 위한 과정입니다. 스위프트는 런타임 에러를 커버할 수 있는 자원을 제공합니다. 몇몇 연산은 완벽한 결과문 또는 쓸만한 아웃풋을 항상 준다는 보장을 할 수 없지만 연산이 실패했을 때 적절하게 반응하기 위해 어떤 문제로 실패하게 되었는지 이해하는 것은 유용합니다. Representing and Throwing Errors 스위프트에서 에러는 Error 프로토콜을 준수하는 타입의 값으로 표현됩니다. 이 프로토콜은 이 타입이 에러 핸들링에 사용될 수 있다는 것을 나타냅니다. 열거형은 비슷한 에러 컨디션을 그룹화하기에 적합합니다. enum VendingMachineError: Error { case invalidSelection case insufficie..
옵셔널 체이닝은 프로퍼티, 메소드, 서브스크립트들에게 현재 nil 값을 가지고 있는 옵셔널 타입인지 묻는 과정입니다. 만약 값이 nil이라면, 프로퍼티, 메소드. 서브스크립트는 nil을 반환합니다. 여러개의 옵셔널도 체인처럼 차근차근 값이 옵셔널인지 질문해 나아갈 수 있습니다.(아래에서 자세히 설명) 그리고 체인은 만약에 체인에 연결된 값 중 하나라도 nil이 있다면 실패합니다. 강제 언래핑의 대안인 옵셔널 체이닝 nil 값이 아닌 정상적인 값이 들어가있을때를 기대하고 프로퍼티나 메소드 혹은 서브스크립트를 호출할 때 옵셔널 값 앞에 ?를 붙임으로서 옵셔널 체이닝 시킵니다. 이것은 !를 붙이는 것과 매우 유사한데. 옵셔널 값이 언래핑되어진 이후 가장 주요한 차이점은 옵셔널 체이닝은 옵셔널이 nil일 경우 ..
클래스는 메소드, 프로퍼티 그리고 다른 특성들을 다른 클래스로부터 상속 받을 수 있습니다. 한 클래스가 다른 클래스를 상속받을 때, 상속 받은 클래스는 subclass 라고 불리며, 상속해준 클래스를 superclass 라고 합니다. 상속은 스위프트의 다른 타입들과 클래스를 구별지는 기본적인 기능입니다. 스위프트의 클래스는 superclass의 메소드, 프로퍼티 그리고 서브스크립트에 접근 및 호출이 가능하며, 또한 자신만의 오버로딩된 버전 또한 수정 및 재정의가 가능합니다. 클래스는 또한 값이 변경되었을 때 알림을 받기 위해서 상속된 프로퍼티에 프로퍼티 옵저버를 추가할 수 있습니다. 원본 프토퍼티가 저장, 연산.프로퍼티로 정의되었음에도 불구하고 말이죠. Base Class 정의하기 다른 클래스로부터 상속..
클래스, 구조체, 열거형은 서브스크립트를 정의할 수 있습니다. 서브스크립트는 Collection, list 또는 sequence의 요소를 단축어로 쉽게 접근 가능합니다. 서브스크립트를 이용해서 별도의 값 지정 및 검색하는 메소드 없이도 값을 지정하고 검색할 수 있습니다. 예를 들어 Array의 인스턴스인 sommArray[index]가 있다고 가정할 때 인덱스값을 통해 요소에 접근하는 것처럼 말입니다. 같은 타입에 여러개의 서브스크립트를 정의하면 사용하기 적절한 오버로딩된 서브스크립트가 상황에 맞게 선택됩니다. 서브스크립트는 1차원에 머물러있지 않습니다. 또한 당신의 커스텀 타입의 수요에 따라 적절한 여러개의 인풋 파라미터값이 있는 서브스크립트를 정의할 수 있습니다. (공식문서를 읽을 때마다 드는 생각이..
메소드는 클래스, 구조체 그리고 열거형 타입과 연관된 함수 입니다. 앞서 언급한 타입들은 인스턴스 메소드와 타입 메소드를 정의할 수 있습니다. (타입 메소드는 Objective-C의 클래스 메소드와 유사합니다.) swift에서 구조체와 열거형도 메소드를 정의가능하다는 사실은 C나 Objective-C와는 큰 차이점입니다. Objective-C에선 클래스는 메소드를 정의할 수 있는 유일한 타입입니다. 스위프트에서는, 유연성있게 메소드를 정의하기 위해 클래스, 구조체, 열거형을 선택할 수 있습니다. 인스턴스 메소드 인스턴스 메소드는 특정 클래스, 구조체, 열거형의 인스턴스에 속하는 함수입니다. 인스턴스 메소드는 인스턴스의 기능적인 부분을 돕거나 인스턴스 프로퍼티들을 수정하고 접근할 방법을 제공합니다. 인스턴..
프로퍼티는 특정 클래스, 구조체 또는 열거형의 값과 연관되어 있습니다. 저장 프로퍼티는 인스턴스 값을 상수나 변수에 저장하고 반면에 연산 프로퍼티는 값을 저장하기 보단 값을 연산한다. 연산 프로퍼티는 클래스, 구조체 그리고 열거형에 사용할 수 있고, 저장 프로퍼티는 열거형에서는 사용할 수 없다. 저장 및 연산 프로퍼티는 각 타입의 인스턴스와 일반적으로 연관되어 있습니다. 그러나 프로퍼티는 타입 그자체와도 연관될 수 있습니다. 예를 들어 타입 프로퍼티로 알려진 프로퍼티 등등.. 게다가 프로퍼티 옵서버를 정의하여 프로퍼티의 값이 바뀌는 것을 모니터링 할 수 있습니다. 프로퍼티 옵서버는 저장 프로퍼티에 추가 가능합니다, 또한 부모 클래스로 부터 상속받은 프로퍼티에게도 가능합니다. 저장 프로퍼티 struct F..