본문 바로가기
반응형

SWIFT37

[Swift 5.1] Opaque Result Types 그리고 some (SE-0244) 이번 글은 아마도 Swift 5.1 업데이트 내역 중 제가 가장 이해하기 힘들었던 변화 같습니다. SE-0244 Opaque Result Types에서 소개된 불투명한 결과 타입(Opaque Result Types)을 위한 some이라는 키워드 도입에 관한 내용입니다. 말로 설명하기 어려우니 예제를 봅시다. 아래 코드는 어떤 컬렉션을 만족하는 인스턴스를 돌려주는 함수를 구현하고 있습니다. func someList() -> Collection { return [1, 2, 3] } 안타깝게도 위 코드는 아래와 같은 빌드 에러를 발생시킵니다. Protocol 'Collection' can only be used as a generic constraint because it has Self or associat.. 2019. 10. 18.
[Swift 5.1] 구조체 생성자에 기본값 지원 (SE-0242) SE-0242 Synthesize default values for the memberwise initializer에서 소개된 프로포절이 5.1에서 구현되었습니다. 워낙 간단한 변화이고 내용도 쉬운 편이라 예제를 프로포절의 것 그대로 옮겨봅니다. struct Dog { var age: Int = 0 var name: String } 위 코드에서 주의 깊게 봐야 할 점은 age 프로퍼티에 초기값이 부여되어 있다는 점입니다. 그럼에도 기존 Swift 버전의 경우 생성되는 기본 생성자는 age와 name 두 파라미터 모두 초기값이 필요하게 생성되었습니다. 5.1부터는 이제 "초기값이 있는 프로퍼티는 굳이 생성할 때 값을 입력받을 필요가 없지 않냐"라는 요구가 받아들여져서 아래와 같이 사용할 수 있는 기본 생성.. 2019. 10. 17.
[Swift 5.1] 순서가 있는 콜렉션끼리 차이점 비교하기 (SE-0240) SE-0240 Ordered Collection Diffing 프로포절은 제목처럼 컬렉션끼리 비교해서 차이점을 얻기 위한 것으로 Swift 5.1에 구현되었습니다. 단순하게 말하자면 difference()라는 메서드가 Collection에 추가되었다라고도 볼 수 있겠네요. 일단 예제를 봅시다. let alpha1 = ["a", "b", "c"] let alpha2 = ["a", "c", "d"] let diff = alpha1.difference(from: alpha2) for d in diff { print(d) } .difference() 메서드를 이용해 두 컬렉션을 비교할 수 있습니다. 결과는 CollectionDifference라는 타입의 컬렉션으로 돌아오는데 데이터를 가지고 있는 enum 필드들.. 2019. 10. 15.
[Swift 5.1] Self 키워드의 기능 추가 (SE-0068) macOS Catalina 공식 버전 출시 이후로 늦었지만 Swift 5.1의 변화점들에 대해 공부하고 있습니다. 이 글을 시작으로 Swift 5.1에서 뭐가 바뀌었는지 눈에 띄는 것들을 글로 정리해보고자 합니다. 첫 글은 SE-0068 Expanding Swift Self to class members and value types에서 소개된 Self의 기능 확장에 대한 이야기입니다. 뭐 아시겠지만 Self는 원래 자기 자신의 동적 클래스(dynamic class)를 가리키는 키워드입니다. 우선 예제를 살펴봅시다. class MyClass { class var name: String { return "unknown name" } func show() { print("My name is \(MyClass... 2019. 10. 13.
Swift 5에서는 뭐가 바뀌었을까? Swift 5가 지원되는 Xcode 10.2가 정식으로 릴리즈 되었습니다. 이에 발맞춰 (그리고 공부 삼아) Swift 5의 변경점을 정리해 보는 글입니다. 이 글은 공식 블로그의 Swift 5 릴리즈 소식을 기준으로 작성합니다. ABI Stability Swift 5는 ABI Stability, 즉 바이너리 레벨의 API 호환성을 드디어 안정화시킨 버전입니다. 이제 사용하는 프레임워크나 라이브러리가 Swift 5 이상으로 빌드했다면 컴파일러가 버전 다르다고 투덜거리는 것을 볼 확률이 많이 없어진다는 말입니다. Raw Text SE-0200 Enhancing String Literals Delimiters to Support Raw Text 이스케이프(escape) 등 문자열 대치(String Inter.. 2019. 4. 7.
728x90
반응형