BT

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

| 作者: Sergio De Simone フォローする 17 人のフォロワー , 翻訳者 編集部T フォローする 1 人のフォロワー 投稿日 2018年2月16日. 推定読書時間: 3 分 |

原文(投稿日: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
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT