Swift3の移行へ向けて予習するために(日本語話者向け)


WWDC2016ついに始まりましたね!
夜中のキーノートではMacbookについての発表がなかったとか少し残念がられている点もあるようですが、Developerにとっては今まで一般人の触れなかったSiriとかマップとかiMessageのSDKだったりXcode8だったり期待されるような情報も結構公開されたようです(と書きつつ僕はリアルタイムで見てないわけなんですが汗)

さっそくβ版がいろいろと公開されたのでDeveloperサイトにいっていろいろ試している人はお気づきだと思いますが、今回のアップデートで本格的にSwiftがver.3へと移行していく模様です。また正式リリースの段階でドタバタするのもあれだと思うのでいち早くSwift3を学んでいこうということで現時点で集められる限りの日本語情報を集めてみました。

リンク

はじめにリンクを貼っておいてその後で日本語情報がまだ足りてない部分の補足を書いていこうと思います。

今のところはここが一番詳しい模様です...

日本語訳されていない情報

とりあえず見つけ次第どんどんやっていこうと思います。なお記事の更新時点で実装されているものかつ上の記事になかったもののみで、実装されていないけど認可されたとなっている項目に関しては触れていません。

SE-0085 SwiftPackageManagerのコマンドラインでの呼び出し方がかわります

SwiftPackageManagerをコマンドラインで扱う際これからはswift packageで扱えるようになります。これにともないswift build --initswift package initなどと書けるようになりました。また新しいコマンドとしてswift package updateが追加されました。

既存のswift buildswift testに関してはswift package buildswift package testに統合されましたが既存のコマンドもこれらのエイリアスとして使えます。

SE-0093 スライスに新しくpublicなbaseプロパティが追加されました

MutableCollection のプロトコルを扱う際、今までのスライスAPIだとbase collectionにアクセスする方法がなかったため(つまるところスライスする前のCollectionにスライス後のものからアクセスできるということでしょうか?)baseプロパティが追加されました。公式のサンプルコードとして以下のような例があげられています。

public struct MutableRandomAccessSlice<
  Base : protocol<RandomAccessIndexable, MutableIndexable>
> : RandomAccessCollection, MutableCollection {

  /// The underlying collection of the slice
  public var base: Base { get }
}

SE-0094 stdlibにsequence(first:next:)とsequence(state:next:)が追加されます

Haskellのiterateおよびunfoldrと同じ機能との説明がなされていますがサンプル見るのがはやいです。以下のように使えます。

for x in sequence(first: 0.1, next: { $0 * 2 }).prefix(while: { $0 < 4 }) {
    // 0.1, 0.2, 0.4, 0.8, ...
}
for view in sequence(first: someView, next: { $0.superview }) {
    // someView, someView.superview, someView.superview.superview, ...
}

要するにコメントに書かれているような配列を生成できる関数ということですね、これでfor文がより便利になる模様