What’s new in swift 5

Hoontopia
hoontopia
Published in
4 min readApr 3, 2019

Swift 5 가 공식적으로 릴리즈 되었다. (벌써?)

프로젝트를 안정적으로 Swift 5 로 Migration 을 하기 위해 변경사항을 알아보고자 한다.

1. Language Updates

Stable ABI and Binary Compatibility

이번 업데이트에서 제일 주요한 변화라고 할 수 있다.

ABI 를 공식적으로 Stable 하다고 공식 적으로 선언(애플 플랫폼 내에서).

Swift 라이브러기가 OS 안에 포함되므로 앱을 쉽게 빌드 할 수 있고, 사이즈가 작아진다!

ABI Stability 에 대한 내용은 아래 포스팅에 정리해보았다.

2. Standard Library Updates

Swift 5 에 다음과 같은 새로운 기능이 추가되었다.

SE-0200 Enhancing String Literals Delimiters to Support Raw Text

Swift 에서는 Escape 문자 (\)를 사용하여 문자열 리터럴 내에서 후속 문자를 특수하게 해석한다. (Swift 에서 미리 정의되어있는 문자열 리터럴을 표현 가능)

하지만, Escape 문자가 포함된 문자열은 가독성이 떨어진다.

이제, “Raw” 문자열 리터럴 구문(#을 사용!)을 사용하여 Escape 처리 없는 “Raw” 텍스트를 사용하자!

어렵다면 다음의 표를 기억하자!

SE-0211 Add Unicode Properties to Unicode.Scalar

Swift 내 유니 코드 수정 작업을 지원하는 Unicode.Scalar 에는 스칼라가 대문자인지 소문자인지 또는 대문자 / 소문자 매핑이 공백 문자인지 등을 묻는 기능이 없었다고 한다.

따라서 위 특성들을 캡슐화하는 Nested 구조체 Unicode.Scalar.Properties 가 추가되었다.

SE-0214 Renaming the DictionaryLiteral type to KeyValuePairs

잘못 명명된 DictionaryLiteral 타입의 이름이 KeyValuePairs 로 바뀌었다. (있는지도 몰랐음;)

(DictionaryLiteral 타입은 Dictionary 나 Literal 이 아니라 키 — 값 쌍의 목록이다.)

공식 문서에는 KeyValuePairs 를 다음과 같은 상황에 쓰라고 기재되어있다.

키 — 값 쌍의 정렬된 컬렉션이 필요하고 Dictionary 타입에서 제공하는 빠른 키 조회가 필요하지 않은 경우 KeyValuePairs 인스턴스를 사용하십시오. (튜플 느낌?)

SE-0215 Conform Never to Equatable and Hashable

열거형 Never Equatable Hashable 프로토콜을 따른다.

* 열거형 Never 이란?
정상적으로 리턴하지 않는 함수의 리턴 유형, 즉 값이없는 유형.

SE-0218 Introduce compactMapValues to Dictionary

Sequence 에 추가된 값을 변환 함과 동시에 옵셔널이 nil 인 값을 필터링 할 때 유용한 compactMap 를 기억하는가? Dictionary 에도 이에 대응되는 compactMapValues 가 추가되었다!

SE-0225 Adding isMultiple to BinaryInteger

종종 현재 정수가 다른 정수의 배수인지 확인하기 위해 나머지 연산자 (%) 를 사용한다.

(특히 값이 짝수인지 홀수인지 확인 하는 경우 상당히 많음)

가독성 / 편의성 / 정확성 향상을 위해 BinaryInteger 프로토콜 (Int 는 SignedInteger 를 따르고 SignedInteger 는 BinaryInteger 를 따른다) 에

isEven / isOdd / isMultiple 이 추가되었다!

SE-0235 Add Result to the Standard Library

Swift의 현재 에러 처리 기능(throws, try 및 catch) 은 에러 전달 및 처리를 하는데 있어서 유연성이 부족하다 (비동기 작업, 복잡한 에러 핸들링 등 어려움.. 융통성 제로 인정;;)

따라서 Swift 표준 라이브러리에 열거형 Result 타입이 추가되었다!

Alamofire 에 내장된 Result 는 AFResult 로 이름이 변경되었다.

다만… Result 라이브러리는 어떻게 변화될 것인가.. (일단 눈물 좀 닦고..)

--

--