目的
Swift4.2で追加された機能を確認できるようにメモ(更新予定)
新機能一覧
Dynamic Member Lookup
Dictionaryを.演算子で参照できる。完全にタイプセーフ。subscriptのSyntaxSuger
let title = dic["title"]
↓
let title = dic.title
将来的に動的型付け言語との相互運用を考えている。
ネクストアクションはPythonのコードをswiftでかけるようにすること。
詳細は下記proposalで。
https://github.com/apple/swift-evolution/blob/master/proposals/0195-dynamic-member-lookup.md
allSatisfy
リファレンス:https://developer.apple.com/documentation/swift/array/2994715-allsatisfy
全ての値をチェックするメソッド。
今までは下記のようにチェックするしかなかった。
// every element is 9
!nums.contains { $0 != 9 }
// every element is odd
!nums.contains { !isOdd($0) }
しかし、これは可読性が低く、実装者も思いつきにくい。結局forループなどを使ってやってしまう。そのため追加された。
nums.allSatisfy(isOdd)
MemoryLayout().offset(of:)
値へのポインタとフィールドへのポインタ間のバイト単位の距離を示す
【参照】MemoryLayout()について
https://qiita.com/ysn551/items/3995c782a92517e86903
CaseIterable
リファレンス: https://developer.apple.com/documentation/swift/caseiterable
列挙型は有限のケースをもっているが、需要に対してそれらの処理がない。
例えば、全てのケースを列挙したり、ケースの数を取得したり、rawValueの最高値を取得したりしたい場合があります。
今回CaseIterableという有限の列挙可能な値の集合を持つことを示すプロトコルを導入した。
enum Ma: CaseIterable { case 马, 吗, 妈, 码, 骂, 麻, 🐎, 🐴 }
Ma.allCases // returns some Collection whose Iterator.Element is Ma
Ma.allCases.count // returns 8
Array(Ma.allCases) // returns [Ma.马, .吗, .妈, .码, .骂, .麻, .🐎, .🐴]
【注意点】
▼ CaseIterableのプロトコルに準拠させるためには以下の条件を満たさなければなりません。
1. enumはassociated valueを含まないcaseのみで構成されていること。
2. enumの宣言時に明示的にCaseIterableを適用させること。
▼ C/Obj-Cヘッダーからインポートした列挙型はCaseIterableに準拠できません。
▼ available属性のunavailableを宣言されたcaseはallCasesに含まれません。
▼ extensionではCaseIterableに準拠できません。オリジナルの宣言時に適合してください。