[Swift] 공식 문서 - 제네릭(Generics)
·
Swift/Swift 가이드
새로 배운 점 제네릭은 Swift에서 가장 강력한 기능 중 하나이며, 대부분의 Swift 표준 라이브러리는 제네릭 코드로 빌드됩니다. 하나 이상의 타입 파라미터를 사용할 수 있는데, 각 타입 파라미터는 꺽쇠 괄호 내에서 콤마로 구분해 작성하면 됩니다. 타입 파라미터가 사용되는 제네릭 타입 또는 함수 간의 관계를 내포하는 이름을 사용합니다. 의미있는 관계가 없다면 T, U, V처럼 영문자를 관례로 사용합니다. 제네릭 타입을 확장할 때, 익스텐션(extension)의 정의의 일부로 타입 파라미터 리스트를 제공하지 않아도 됩니다. 원본 타입 정의에서 타입 파라미터 리스트를 익스텐션의 바디 내에서 사용할 수 있고, 원본 타입 파라미터의 이름들은 원본 정의에서의 타입 파라미터를 참조하는데 사용됩니다. 타입 제약은..
[Swift] 공식 문서 - 프로토콜(Protocols) - 2
·
Swift/Swift 가이드
* Protocols 가이드 1편은 여기에서 볼 수 있습니다. 새로 배운 점 제네릭(generic) 타입은 프로토콜 이름 뒤에 where 절이 있을 때만 프로토콜의 요구사항을 만족합니다. Swift는 다음과 같은 커스텀 타입에 대해 Equatable 구현을 제공합니다. Equatable을 따르는 저장 프로퍼티만 가진 구조체 Equatable을 따르는 associated 타입만 가진 열거형 associated 타입이 없는 열거형 Swift는 다음과 같은 커스텀 타입에 대해 Hashable 프로토콜을 따르도록 할 수 있습니다. Hashable을 따르는 저장 프로퍼티만 가지고 있는 구조체 Hashable을 따르는 associated 타입만 가지고 있는 열거형 associated 타입이 없는 열거형 raw va..
[Swift] 공식 문서 - 프로토콜(Protocols) - 1
·
Swift/Swift 가이드
* Protocols 가이드는 너무 길어서 두 편으로 나눠 포스팅합니다. 2편은 여기에서 볼 수 있습니다. 최하단에도 링크를 적어두었습니다. 새로 배운 점 구현해야 하는 요구사항을 지정하는 것 이외에도 이러한 요구사항 중의 일부를 구현하거나 추가 기능을 구현하도록 프로토콜을 확장할 수도 있습니다. Property 요구사항(requirements)은 항상 var 키워드를 앞에 붙여서 변수 프로퍼티로 선언합니다. 프로토콜에서 메서드들은 메서드의 body와 괄호를 제외하고 나머지를 작성합니다. 프로토콜에서 메서드는 가변 매개변수는 허용하지만 기본값은 설정할 수 없습니다. 프로토콜에 mutating을 사용한 경우, 이 프로토콜을 따르는 클래스를 구현할 때는 mutating을 명시하지 않아도 됩니다. 프로토콜을 ..
[Swift] 공식 문서 - 익스텐션(Extensions)
·
Swift/Swift 가이드
새로 배운 점 익스텐션은 원본 코드를 건들지 않고 타입을 확장할 수 있는 기능이며, retroactive 모델링이라고 합니다. 익스텐션은 Objective-C의 카테고리와 유사합니다. 익스텐션으로 designated 이니셜라이저 또는 deinitializer는 추가할 수 없습니다. 만약 익스텐션을 사용하여 모든 저장 프로퍼티에 기본 값이 설정되어 있고, 어떠한 커스텀 이니셜라이저를 정의하지 않은 값 타입에 이니셜라이저를 추가하면, 익스텐션 이니셜라이저에서 기본 이니셜라이저와 멤버와이즈 이니셜라이저를 호출 할 수 있습니다. 만약 익스텐션을 사용하여 다른 모듈에서 선언된 구조체에 이니셜라이저를 추가하면, 새로운 이니셜라이저는 모듈에 정의된 이니셜라이저를 호출하기 전까지 self에 접근할 수 없습니다. 익스텐..
[Swift] 공식 문서 - 중첩 타입(Nested Types)
·
Swift/Swift 가이드
새로 배운 점 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. Nested Types 열거형은 종종 특정 클래스나 구조체 기능을 지원하기 위해 만들어지기도 합니다. 보다 복잡한 타입의 Context 내에서 사용하기 위해서는 유틸리티 클래스 및 구조체를 정의하는 것이 편리할 수 있습니다. 이를 위해 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. 타입을 다른 타입에 중첩키시려면 지원하는 타입의 외부 중괄호 안에 해당 정의를 작성하면 됩니다. 타입은 필요한만큼 중첩할 수 있습니다. Nested Typ..
[Swift] 공식 문서 - 타입 캐스팅(Type Casting)
·
Swift/Swift 가이드
새로 배운 점 클래스와 서브클래스의 계층 구조가 있는 타입 캐스팅을 사용하여 특정 클래스 인스턴스의 타입을 확인하고 그 인스턴스를 같은 계층에 있는 다른 클래스로 캐스팅할 수 있습니다. Any 또는 AnyObject 타입에서 알고 있는 상수나 변수의 특정 타입을 찾으려면, switch문에서 is 또는 as 패턴을 사용할 수 있습니다. Type Casting 타입 캐스팅(Type Casting)은 인스턴스의 타입을 체크하거나 해당 인스턴스를 인스턴스 자신의 클래스 계층에서 다른 슈퍼클래스 또는 서브클래스로 처리하는 방법입니다. Swift에서 타입 캐스팅은 is와 as 연산자로 구현됩니다. 이 두 연산자는 값의 타입을 체크하거나 다른 타입으로 그 값을 캐스팅하는 간단하고 효과적인 방법입니다. Defining..
[Swift] 공식 문서 - 동시성(Concurrency)
·
Swift/Swift 가이드
새로 배운 점 동시성이 필요한 코드에서 Swift 언어 수준에서 제공하는 동시성을 사용하면 Swift가 컴파일 타임에 문제를 잡는데 도움을 줄 수 있습니다. Swift의 동시성 모델은 Thread 위에서 구축되었지만, 직접 상호작용 하지는 않습니다. 비동기 메서드 내부에서 실행 흐름은 오직 다른 비동기 메서드를 호출할 때만 일시 정지되는데, 일시중지는 암시적이거나 우선적이지 않기 때문에 가능한 모든 일시중지 지점은 await로 표시됩니다. await 키워드가 사용된 코드는 실행을 일시 중지할 수 있어야 하기 때문에, 프로그램의 특정 장소에서만 비동기 함수나 메서드를 호출할 수 있습니다. 비동기 함수, 메서드, 프로퍼티의 본문에 있는 코드 @main으로 표시된 구조체, 클래스, 열거형의 static mai..
[Swift] 공식 문서 - 에러 핸들링(Error Handling)
·
Swift/Swift 가이드
새로 배운 점 Swift는 런타임 에러를 처리하기 위해 throwing, catching, propagting, manipulating을 지원하는 일급 클래스(first-class)를 제공합니다. Swift에서 에러는 Error 프로토콜을 준수하는 타입의 값으로 표현됩니다. Swift에서 에러 처리를 많은 계산이 필요할 수 있는 Call Stack Unwinding과 관련이 없다는 것입니다. 에러를 반환하는 throw문은 일반적인 return과 비슷한 성능을 보여줍니다. throws 키워드가 붙은 함수는 throwing function 이라고 부릅니다. 만약 catch절이 패턴을 가지고 있지 않다면, 이 catch절은 모든 에러와 일치하고 해당 에러를 error라는 로컬 상수로 바인딩합니다. defer문..
[Swift] 공식 문서 - 옵셔널 체이닝(Optional Chaining)
·
Swift/Swift 가이드
새로 배운 점 옵셔널 체이닝은 2계층 이상의 프로퍼티나 메서드, 서브스크립트를 호출할 때에도 사용할 수 있습니다. 옵셔널 체이닝을 사용하여 옵셔널 값에 대해 메서드를 호출하고 그 메서드 호출이 성공했는지 확인할 수 있습니다. 이 방법은 메서드의 반환값이 정의되지 않은 경우에도 사용할 수 있습니다. 메서드의 리턴 값에 추가 옵셔널 체이닝을 사용하고 싶다면, 물음표를 메서드의 괄호 뒤에 적으면 됩니다. Optional Chaining 옵셔널 체이닝(Optional Chaining)은 현재 nil일 수도 있는 옵셔널 프로퍼티, 메서드, 서브스크립트를 참조하고 호출하는 과정입니다. 만약 옵셔널이 값을 가지고 있다면 프로퍼티, 메서드, 서브스크립트는 성공적으로 호출됩니다. 만약 nil이라면 nil을 반환합니다. ..
[Swift] 공식 문서 - 인스턴스 해제(Deinitialization)
·
Swift/Swift 가이드
새로 배운 점 슈퍼 클래스의 소멸자는 슈퍼클래스의 서브클래스에 의해 상속되고, 슈퍼클래스의 소멸자는 자동으로 서브클래스의 소멸자의 끝에 호출됩니다. Deinitialization Deinitialization는 클래스 인스턴스가 해제될 때 즉시 호출됩니다. Deinitialization는 deinit 키워드를 사용하여 작성할 수 있으며, init 키워드를 사용하여 이니셜라이저를 작성하는 방법과 유사합니다. Deinitialization는 오직 class 타입에서만 사용할 수 있습니다. How Deinitialization Works Swift는 인스턴스가 더이상 필요 없을 때 자동으로 인스턴스를 할당 해제하여 리소스를 해제합니다. Swift는 인스턴스의 메모리 관리를 Automatic Reference ..
유정주
'iOS 개발' 태그의 글 목록 (6 Page)