BT

Swift 3.1がリリース

| 作者: Sergio De Simone フォローする 17 人のフォロワー , 翻訳者 sasai フォローする 0 人のフォロワー 投稿日 2017年4月12日. 推定読書時間: 4 分 |

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

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには 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