목록전체 글 (26)
주니곰의 괴발노트
정의 확장 (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..
타입으로서의 프로토콜 프로토콜 자체는 어떤 기능도 구현하지 않지만, 프로토콜을 코드에서 완전한 타입으로 사용가능 타입으로 프로토콜을 사용하는 것은 "T가 프로토콜을 준수하는 타입 T가 존재한다"라는 구절에서 비롯된 존재 타입 (existential type) 다른 타입 (Int, String, 그리고 Double 등)이 허용되는 여러 위치에서 프로토콜을 사용가능 프로토콜은 타입이므로 이름을 대문자로 시작 protocol RandomNumberGenerator { func random() -> Double } class LinearCongruentialGenerator: RandomNumberGenerator { var lastRandom = 42.0 let m = 139968.0 let a = 3877...