눈에 띄는 Swift 4 변경점들 (Xcode 9 첫 Beta 기준)
최근에는 좀 게으르게(?) 지내고 있다가 WWDC가 온줄도 모르고 Xcode 9 의 베타가 나오는 줄도 모르고 허송세월 보내고 있었다. 잠깐 정신을 차리고 Swift 4 에 관련된 내용을 간단히 정리해 볼까 한다.
Swift 4 에서 생기는 변화는 문법적인 변화 보다는 기능의 추가에 중점이 맞춰진 것 같다. 그래서 아마도 대비하기에는 이전 보다는 편할 것 같다.
[관련글] Swift 4 - Codable / JSONDecoder / JSONEncoder
이와 비슷한 것을 Swift 에도 도입하려는 것이 이것인 것 같다. 아래와 같이 '&' 문자를 이용해 프로토콜을 함께 명시할 수 있다.
'&' 문자는 AND 연산자를 떠올리게 하는데, 타입 선언에서만 사용되니 헷갈리지는 않을 것 같다.
대표적으로 리스트로 사전형을 생성할 수 있게 되었다.
그리고 사전형에 기본값이라는 개념이 생겼다. 기존의 사전형의 경우 엉뚱한 키로 엑세스 하면 nil을 리턴했지만 Swift 4 부터는 아래와 같이 기본값을 설정할 수 있다.
그 외에 사전형(Dictionary)과 집합형(Set)에서 사용되는 filter 나 map 이 이제 배열이 아니라 원래의 타입 형태로 리턴되게 바뀌었다.
기타 많은 기능이 추가되었으니 매뉴얼을 확인하자.
그런데 최소나 최대 범위를 표현하기 위해 새로운 문법이 추가되었다. 예를 들어
루프에 이런 식을 써버리면 아마도 난감하겠지만, 범위에서 시작이나 끝 지점을 표현할 때는 유용할 것 같다.
참고로 멀티라인 문자열 표기법이라 아래와 같이 쓰면 에러가 난다.
내부적으로 뭔가 많이 바뀌고 있는 것 같다. 컬렉션과 관련된 것들도 보이고 프로토콜과 관련된 것들도 보인다. 하지만 왠지 이런 류들의 변화는 크게 쓸 일이 잘 없는 것 같다. (그리고 개인적으로 이해가 잘 안되고 -_-;;;;)
이 외에도 상당수의 변화가 있긴 한데 대부분 기능의 추가와 관련된 부분들이라 특별히 정리할 필요는 없을 것 같다. 예를 들어 Array 의 swapAt 같은 기능은 알면 좋고 없어도 알아서 만들 것 같기도 하고 말이다. :-)
[관련글] Swift 4 - Codable / JSONDecoder / JSONEncoder
[관련글] 스위프트(Swift) 가이드
Swift 4 에서 생기는 변화는 문법적인 변화 보다는 기능의 추가에 중점이 맞춰진 것 같다. 그래서 아마도 대비하기에는 이전 보다는 편할 것 같다.
이 글은 Xcode 9 첫 베타 버전 기준으로 쓰여졌다.
Codable
이건 아래 상세한 글을 참고하자.[관련글] Swift 4 - Codable / JSONDecoder / JSONEncoder
프로토콜이 명시된 타입
Objective-C 에서는 특수한 프로토콜을 따르는 인스턴스를 지정하는 방법이 있다. 예를 들어 아래와 같은 프로퍼티를 보자.@property (strong) id<SomeProtocol> delegate;이렇게 하면 SomeProtocol 을 따르는 인스턴스만 delegate 에 대입 할 수 있다.
이와 비슷한 것을 Swift 에도 도입하려는 것이 이것인 것 같다. 아래와 같이 '&' 문자를 이용해 프로토콜을 함께 명시할 수 있다.
var viewController: UIViewController & UITableViewDataSource위와 같은 viewController 프로퍼티가 있다면 이 프로퍼티에는 반드시 UIViewController 의 인스턴스 이면서 동시에 UITableViewDataSource 를 따르는 인스턴스만을 대입 할 수 있게 된다.
'&' 문자는 AND 연산자를 떠올리게 하는데, 타입 선언에서만 사용되니 헷갈리지는 않을 것 같다.
사전형과 집합
다양한 편의 기능이 추가되었다. 이 중 몇 가지만 꼽아보자.대표적으로 리스트로 사전형을 생성할 수 있게 되었다.
let dict = [String : Int](uniqueKeysWithValues: [("a", 111), ("b", 222)]) // ["a": 111, "b": 222]위 예제는 키와 값 순서로 선언한 튜플 배열을 이용해 사전형 데이터를 생성한다.
그리고 사전형에 기본값이라는 개념이 생겼다. 기존의 사전형의 경우 엉뚱한 키로 엑세스 하면 nil을 리턴했지만 Swift 4 부터는 아래와 같이 기본값을 설정할 수 있다.
dict["c", default: -1] // -1참고로 위 예제는 이 앞의 예제가 실행된 것을 가정하고 있다.
그 외에 사전형(Dictionary)과 집합형(Set)에서 사용되는 filter 나 map 이 이제 배열이 아니라 원래의 타입 형태로 리턴되게 바뀌었다.
기타 많은 기능이 추가되었으니 매뉴얼을 확인하자.
키패스(Key Path) 표기
새로운 키패스 표기법이 추가되었다.\Type.propertyName예를 들어 이런 식이다.
struct MyType { let name: String let value: Int } let a = MyType(name: "a", value: 100) a[keyPath: \MyType.name] // "a" a[keyPath: \MyType.value] // 100 let keyPath = \MyType.name type(of: keyPath)백슬래시가 좀 마음에 안들긴 하지만 문법 자체는 나쁘진 않다. 참고로 플레이그라운드에서 마지막의 type(of:) 결과과 좀 복잡하게 표시되지만 String 타입이라고 알 수 있다.
단방향 범위(Range)
원래 범위 표기는 시작과 끝이 있어야 했다. 예를 들어 1부터 100 까지는1...100
로 표기했다.그런데 최소나 최대 범위를 표현하기 위해 새로운 문법이 추가되었다. 예를 들어
1...은 1 부터 끝(?) 까지라는 범위 표현이다. 반대로
...100은 처음부터 100 까지라는 범위 표현이다.
루프에 이런 식을 써버리면 아마도 난감하겠지만, 범위에서 시작이나 끝 지점을 표현할 때는 유용할 것 같다.
문자열(String)
역시 몇 가지만 뽑아보겠다.멀티라인 문자열 표기
""" First line. Second line. """마치 Python 에서 본 듯한 문법인데 정말 비슷하다. 이 문자열은 실제로 아래와 같이 만들어진다.
"First Line.\nSecond Line."시작과 끝 부분을 표시하는 따옴표 3개의 위치를 잘 보자.
참고로 멀티라인 문자열 표기법이라 아래와 같이 쓰면 에러가 난다.
let str = """This is single line string"""좀 스트릭트 하지만 이게 장점이기도 하니... :-)
부분문자열(Substring)
let string = "this is test" let index = string.index(of: " ")! // 4 let firstWord = string[..<index] // "this" type(of: firstWord) // Substring.Type서브스크립트 슬라이스(Subscript Slice)를 통해 생성된 firstWord 의 타입은 Substring 이라는 타입이다. 의미를 보면 알겠지만 원래 문자열의 부분 문자열이라는 의미다.
문자의 갯수(count)
"abc".count == "abc".characters.count // true즉, 문자 갯수를 알기 위해 이제 문자열 인스턴스의 .characters.count 대신 다시 .count 프로퍼티를 쓸 수 있다. 왜 그런지 모르겠지만 어쨌든 짧게 쓸 수도 있으니 좋은건가?
마무리
앞서 Xcode 9 의 첫 베타 버전 기준으로 시험한 것이기 때문에 나중에 다시 바뀔 여지는 충분히 있다.내부적으로 뭔가 많이 바뀌고 있는 것 같다. 컬렉션과 관련된 것들도 보이고 프로토콜과 관련된 것들도 보인다. 하지만 왠지 이런 류들의 변화는 크게 쓸 일이 잘 없는 것 같다. (그리고 개인적으로 이해가 잘 안되고 -_-;;;;)
이 외에도 상당수의 변화가 있긴 한데 대부분 기능의 추가와 관련된 부분들이라 특별히 정리할 필요는 없을 것 같다. 예를 들어 Array 의 swapAt 같은 기능은 알면 좋고 없어도 알아서 만들 것 같기도 하고 말이다. :-)
[관련글] Swift 4 - Codable / JSONDecoder / JSONEncoder
[관련글] 스위프트(Swift) 가이드
댓글