BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Swift 3.1がリリース

Swift 3.1がリリース

ブックマーク

原文(投稿日:2017/03/31)へのリンク

計画していた通り、最近発表されたSwift 3.1には、Swift 3.0とソースレベルの互換性がある。だが、言語、標準ライブラリ、Linux実装には多数の変更と改善が含まれている。

言語フロントにおいては、Sequenceプロトコルに2つの新しいメンバdrop(while:)prefix(while:))が追加された。これらは与えられた述部が真である間、もとのシーケンスの要素をドロップもしくはインクルードしていき、得られたサブシーケンスを返す。したがって、シーケンスsがある場合に以下を実行することで、nからmまでのサブシーケンスを取り出せる。

let subseq = s.prefix(while: {$0 < m}).drop(while: {$0 < n})

Swift 3.1には、IntFloatDouble型を含むすべての数値型に変換イニシャライザが追加された。これは正しい結果を生成するか、さもなくばnilを返すようになっている。Failableイニシャライザを呼び出すことで、、JSON形式のような緩く型付けされたデータの変換をより適切に扱うことができる。すべての数値型は、exactlyキーワードを使った新しいイニシャライザを持つようになる。

init?(exactly value: Int64)

コミュニティからのフィードバックによると、例外を投げる可能性のあるイニシャライザよりも、失敗する可能性のあるイニシャライザの方が好まれているようだ。

また、公式発表では触れられていないが、Swift 3.1にアップデートされたAppleのガイドには、型の拡張にジェネリックなwhere節を入れることができると書かれている

extension Container where Item == Double {
    func average() -> Double {
        var sum = 0.0
        for index in 0..<count {
            sum += self[index]
        }
        return sum / Double(count)
    }
}

where節はこれまで、指定したプロトコルに対してジェネリックスを制約するためにしか使えなかった。このことは、制約を指定するためだけにアドホックなプロトコルを導入することを引き起こしていた。

extension Container where Item: MyConstrainProtocol {
...

言語に関するものの最後として、Swift 3.1では@available属性が拡張された。これまでは言語とプラットフォームしか指定できなかったが、Swiftバージョンによって利用可能かどうかを指定できるようになった。

@available(swift, introduced: 3.0, obsoleted: 3.1)
class Foo {
  //...
}

プログラマはこれによって、関数や宣言などで代替バージョンを扱うための条件付きコンパイルから解放される。

SwiftのLinux実装に関しては、NSDecimalURLSessionNSArrayNSData JSONシリアライゼーション性能の改善など、既存のクラスの多くが改善されている。

最後に、Swift Package Managerには、次のような待ち望まれていた機能が追加されている。

  • パッケージが編集可能にswift package editコマンドを使ってパッケージを編集できるようになる。これは、パッケージをユーザーのPackageディレクトリに移して、依存関係の更新を回避できることを意味している。ユーザーはそのパッケージに対して、自由にコミット、プッシュできるようになる。
  • バージョン固定swift package pinswift package unpinコマンドを使う、もしくはPackage.pinsファイルを編集することによって、バージョンを固定することができる。
  • バージョン要求。古いツールチェーンを使っているクライアントを壊すことなく、Swiftの機能を導入することができる。古いツールチェーンでパッケージをアップデートした場合、新しい機能を必要とするパッケージのバージョンは自動的に無視される。
  • Swift互換バージョン。これまでのものと似ているが、パッケージのために使われる言語バージョン、3もしくは4。

Swift 3.1は、macOS上ではXcode 8.3を通して利用できる。Ubuntu用にはバイナリが配布されており、それ以外のプラットフォームにはGitHubにあるソースコードが利用できる。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT