はじめに
Swift4になり、String APIにいくつかの変更があったようなので、実際にPlaygroundで試してみました。
検証環境
以下の環境を使用しています。
- macOS Sierra Version 10.12.4
- Xcode Version 9.0.0 β1
Multi-line string literals
複数行の表示がより直感的に簡潔になりました。
以前では複数行表示する際にescaping sequenceを使用し、\n
で改行するか、print
を複数行使用する必要がありましたが、Swift4では、「"""」で文字列を囲むことで、複数行の文字列の表示が可能です。
具体例
Swift3
print("あいうえお かきくけこ")
print("さしすせそ たちつてと\nなにぬねの はひふへほ")
print("まみむめも や ゆ よ\nらりるれろ わ を ん")
Swift4
print("""
あいうえお かきくけこ
さしすせそ たちつてと
なにぬねの はひふへほ
まみむめも や ゆ よ
らりるれろ わ を ん
""")
stringが再びCollectionTypeに
StringがCollectionTypeになったことにより、filterやmapを使用した直感的な記法が使えるようになりました。
具体例:文字列から ! を除外する
Swift3
var string = "Don’t ask for permission!, beg for forgiveness!"
let filtered = String(string.characters.filter{ !"!".contains($0) })
Swift4
var string = "Don’t ask for permission!, beg for forgiveness!"
let filtered = string.filter{ $0 != "!" }
具体例2:文字列の先頭6文字のみ残す
Swift3
let string = "we can't"
let prefixed = String(string.characters.prefix(6))
Swift4
let string = "we can`t"
let prefixed = string.prefix(6)
所感
charactersを介さずに書けることになったことにより、非常に簡潔な書き方ができるようになったと思います。個人的にはMulti-line string literalsが地味に便利だなと感じました。