読者の皆様へ:ノイズを減らすための一連の機能を開発しました。関心のあるトピックについて電子メールとWeb通知を受け取ることができます。新機能の詳細をご覧ください。
Swift 4.1が正式に利用可能になり、新しい言語機能、ビルドオプション、Swift Package ManagerとFoundationに対するいくつかの拡張機能が導入された。
InfoQがこれまでに報告したように、Swift 4.1がXcode 9.3ベータ版で事前に利用可能になったとき、言語レベルで最も重要な新機能は条件付き適合であった。条件付き適合によって、開発者は、型パラメータが所定の要件を満たす場合にのみ、ジェネリック型がプロトコルに準拠することを指定できる。これはジェネリックアダプタ型を定義する可能性を考慮すると重要である。ジェネリックアダプタ型とは、コンポーネント型のAPIの一部を公開するコレクション型などの、複合型の機能を反映するジェネリック型である。
Swift 4.1におけるジェネリック型のもう一つの強力な拡張は、関連型に対して再帰の制約を指定できることである。Swiftの関連型は、プロトコル仕様では、知らない型のプレースホルダとして使用され、代わりにプロトコルが適合するときに提供される。たとえば、Item
関連型を使用するContainer
プロトコルを次に示する。
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
オプションとして、Item
は、特定の型またはプロトコルに制約されてもよい。例を次に示す。
protocol Container {
associatedtype Item : Bar
...
}
Swift 4.1より前のバージョンでは、関連型の型制約あるいはプロトコル制約は、定義されているプロトコルを再帰的に参照できなかった。Swift 4.1ではその制限が解除され、次の再帰的なプロトコルが可能になる。
protocol Container {
associatedtype Item : Container
...
}
Swift 4.1の他の新しい言語機能には次のようなものがある。
- Equatable適合とHashable適合の合成。コンパイラによって合成可能であることを宣言するだけで、開発者が
==
およびhashValue
の実装を定義する必要がなくなる。 Sequence.flatMap
は廃止され、Sequence.compactMap
に置き換えられる。これによって、flatMap
に対するさまざまな個々のオーバーロードが存在することによる混乱を防ぐことができる。
コンパイラフロントでは、既にサポートされている速度最適化に加えて、Swift 4.1がコードサイズ最適化モードをサポートするようになった。新しい最適化オプションは、モジュール全体でもシングルファイルコンパイルモードでも動作し、前者は最適な結果を提供する。Appleによると、これによって、あるプロジェクトではコードサイズが5%から30%に縮小される可能性がある。
最後に、Swift 4.1ではPackage Managerの機能が強化された。つまり、ssh
やhttp
などの異なるプロトコルを使用するパッケージグラフの依存関係を正しく解決するようになった。さらに、共有されている依存関係の処理が高速になった。
Swift 4.1はmacOSのXcode 9.3で利用でき、公式のバイナリはUbuntuで利用可能である。
Rate this Article
- Editor Review
- Chief Editor Action