LoginSignup
15
14

More than 5 years have passed since last update.

Swift4.2の新機能メモ

Last updated at Posted at 2018-07-19

目的

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に準拠できません。オリジナルの宣言時に適合してください。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14