목록iOS (10)
주니곰의 괴발노트
정의 확장 (Extensions) 은 기존의 클래스, 구조체, 열거형, 또는 프로토콜 타입에 새로운 기능을 추가 이것은 기존 소스 코드에 접근 권한이 없는 타입을 확장하는 기능이 포함 (소급 모델링 (retroactive modeling) 이라고 함) 확장은 Objective-C의 카테고리와 유사 (Objective-C 카테고리와 달리 Swift 확장은 이름이 없음) Swift에서 프로토콜을 확장하여 요구사항의 구현을 제공하거나 준수하는 타입의 기능을 추가 확장은 타입에 새로운 기능을 추가할 수 있지만 기존 기능을 재정의 할 수는 없음 Swift에서 확장은 다음과 같은 기능을 수행 계산된 인스턴스 프로퍼티와 계산된 타입 프로퍼티 추가 인스턴스 메서드와 타입 메서드 정의 새로운 초기화 구문 제공 서브 스크..
Swift의 동시성 Swift 는 구조화된 방식으로 비동기 (asynchronous) 와 병렬 (parallel) 코드 작성을 지원 비동기 코드 (Asynchronous code) 는 일시적으로 중단되었다가 다시 실행할 수 있지만 한번에 프로그램의 한 부분만 실행 프로그램에서 코드를 일시 중단하고 다시 실행하면 UI 업데이트와 같은 짧은 작업을 계속 진행하면서 네트워크를 통해 데이터를 가져오거나 파일을 분석하는 것과 같은 긴 실행 작업을 계속할 수 있음 병렬 코드 (Parallel code) 는 동시에 코드의 여러부분이 실행됨을 의미 예를 들어 4코어 프로세서의 컴퓨터는 각 코어가 하나의 작업을 수행하므로 코드의 4부분을 동시에 실행 가능 병렬과 비동기 코드를 사용하는 프로그램은 한 번에 여러 작업을 수..
확장으로 프로토콜 준수성 추가 기존 타입에 대해 소스 코드에서 접근할 수 없지만 새로운 프로토콜을 채택하고 준수하기 위해 기존 타입을 확장가능 확장은 기존 타입에 새로운 프로퍼티, 메서드, 그리고 서브 스크립트를 추가할 수 있으므로 프로토콜이 요구할 수 있는 모든 요구사항추가 가능 타입의 기존 인스턴스는 확장에 인스턴스의 타입이 추가될 때 자동으로 프로토콜을 채택하고 준수 protocol TextRepresentable { var textualDescription: String { get } } extension Dice: TextRepresentable { var textualDescription: String { return "A \(sides)-sided dice" } } let d12 = Dice..
메서드 요구사항 프로토콜은 준수하는 타입에 의해 구현되기 위해 지정한 인스턴스 메서드와 타입 메서드를 요구할 수 있음 프로토콜에서 정의하는 메서드는 일반적인 인스턴스와 타입 메서드와 같은 방식으로 명시적으로 프로토콜의 정의의 부분으로 작성되며 중괄호가 없거나 메서드 바디가 없음 일반적인 메서드와 같은 규칙에 따라 가변 파라미터는 허용되나 기본 값은 프로토콜의 정의 내에서 메서드 파라미터에 대해 지정될 수 없음 타입 프로퍼티 요구사항과 마찬가지로 프로토콜에 정의될 때 static 키워드를 항상 타입 메서드 요구사항 앞에 표기 클래스에 의해 구현될 때 타입 메서드 요구사항에 class 또는 static 키워드가 접두사로 붙는 경우에도 마찬가지 protocol SomeProtocol { static func ..