BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Swift 4.1では条件付きの適合性などを提供

Swift 4.1では条件付きの適合性などを提供

ブックマーク

原文(投稿日:2018/02/11)へのリンク

読者の皆様へ:お客様のご要望に応じて、重要なものを逃すことなく、ノイズを低減できる一連の機能を開発しました。興味のあるトピックを選択して、電子メールとWeb通知を入手してください

Xcode 9.3で提供されているSwift 4.1では、EquatableおよびHashableプロトコルの自動実装、条件付きの適合など、言語に対していくつか改善があった。

条件付き適合

条件付き適合によって、ジェネリック型がその型パラメータが特定の要件を満たす場合にのみ、プロトコルに準拠するという考え方を表現できるようになる。例えば、Arrayは、その要素がEquatableに準拠している場合にのみEquatableプロトコルを実装することができる。これは次の宣言にように表現できる。

extension Array: Equatable where Element: Equatable {
  static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... }
}

これにより、Swiftジェネリックのギャップが埋まり、ジェネリックアダプタ型、つまり合成された型の機能をリフレクトするジェネリック型を使えるようになる。たとえば、Swift 3では、「lazy」な要素を扱う、LazySequenceLazyCollectionLazyBidirectionalCollectionLazyRandomAccessCollectionの4つの異なるジェネリック型が存在する。これらのタイプのそれぞれは、合成された型として、同じAPIを再実装または転送する。条件付き適合を使用すると、lazy型のSequenceは、間に入るジェネリック型を定義せずにlazyプロトコルに準拠するものとして宣言することができる。

合成された==hashValue

Swift 4.1コンパイラは、EquatableおよびHashableプロトコルへの準拠を宣言する構造体および列挙型に対して、==およびhashValueメソッドの実装を合成できる。以前は、開発者はこれらのメソッドのカスタム実装を提供する必要があったが、それは面倒な作業であった。つまり、メソッドの実装では、一般的な場合、構造体または共用体の対応するメンバをそれぞれ比較する必要があった。また、hashValueは、一意の文字列を返すことを保証する必要があった。Swift 4.1では、開発者はこれらのプロトコルへの準拠を宣言するだけで、関連するメソッドは自動的に合成される。ただし、すべての格納されたプロパティや列挙型がそれぞれEquatableあるいはHashableに準拠する必要がある。

Swift 4.1のその他の重要な変更点は次のとおりである。

Swift 4.1内のすべての変更の完全なリストは、公式の変更ログにある。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT