Swift 4のリースから1年、Swift 4.2が公式にリリースされた。ジェネリクスの改善、Hashtableプロトコル、乱数生成など、言語と標準ライブラリにいくつかの改良が加えられている。さらに、メンテナのTed Kremenek氏によると、コンパイル時間の短縮やデバッグエクスペリエンスの改善も実現されている。
言語レベルでは、4.1で始められていた、ジェネリクスの条件適合の実装が完了した。これによって、型がプロトコルに準拠するために満たさなければならない条件の指定が可能になる。例えば,
extension Array: Equatable where Element: Equatable {
static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... }
}
Swift 4.2で追加されたのは、実行時に条件適合を問い合わせる機能である。Swift 4.1でこれを使用すると、クラッシュが発生していた。
if let array = items as? Equatable { //- safely use == here }
もうひとつの便利な機能は、Enum
ケースの派生コレクション(derived collection)で、CaseIterable
プロトコルに準拠したEnum
の全ケースを.allCases
プロパティを使って反復することができる。
言語の改良点としては他にも、乱数の生成とシャッフルのための新APIやハッシュの改善、タイプセーフな動的メンバルックアップなどがある。
デバッグ面では、コード内の問題をフラグする#warning
と#error
ディレクティブがSwiftコンパイラでサポートされた。例えば,
#warning("Unsafe operation")
#error("Prodive your credentials here")
Kremenek氏はさらに、バッチモードコンパイルによるコンパイラのパフォーマンス向上と、retain/releaseサイクルの呼び出し規約の変更によるランタイムパフォーマンスの向上についても強調した。
これとは別に、iOS開発者のJavier Soto氏が次のようにツイートしている。
1年を経て、リリース停止の原因となったKVOバグが解決されないまま、Swift 4.2は公開されました。ランダムなクラッシュを望まないのであれば、iOSアプリではSwift KVO構文は使用しないでください。
具体的には、このバグは、メインスレッドがUI要素の更新などにオブザーバを登録しようとしている間に、KVO keyPathsForValuesAffectingValueメソッドがバックグラウンドで実行された時に発生する可能性がある。
影響を受けるすべての開発者のために、PMKBVObserverが、安全で強く型付けされたSwift 4 KVO構文の代替手段を提供している。
Swift 4.2はSwift 4および3とソース互換で、Xcode 10に含まれている。以前のバージョンからの移行は、Swift Migrationツールを使えば簡単だ。
Swift 4の新機能に関する概要はWWDC 2018でAppleが実施した40分間のプレゼンテーションで、より詳細な情報は公式発表で、いずれも確認することができる。また、Swift 4.2の新機能を学ぶ格好のリソースとして、Ole Begamann氏のSwift 4.2プレイグラウンドがある。
この記事を評価
- 編集者評
- 編集長アクション