XCodeを7.2にバージョンアップすると、Swiftも2.2にバージョンアップされ、これに伴い、Swift3.0での変更点の警告が出るようになりました。
開発途中にうっかりバージョンアップしてしまって、警告が山ほど出て面食らったのですが、大きく4つの修正で警告が消えました。
関数内で値を変更したい変数にvarをつける書き方がなくなる
関数内で値を変更したい場合、varではなくinoutをつけて、呼び出し時の変数に&をつける形を使う必要があります。ただ、inoutを使うと呼び出し元の値も変更されてしまうので注意が必要。
// いままで func hoge(var i: Int) { i += 1 print("A:\(i)") // A:2 } var i = 1 hoge(i) print("B:\(i)") // B:1 呼び出し元には影響なし
// Swift3.0以降はこっちを使う func hoge(inout i: Int) { i += 1 print("A:\(i)") // B:2 } var i = 1 hoge(&i) print("B:\(i)") // B:2 呼び出し元の値も変わる
++と–がなくなる
i++ は i += 1に
i– は i -= 1
と書く必要があります
// いままで i++ --i
// Swift3.0以降 i += 1 i -= 1
慣れていると面倒ですが、++は ++iとi++で意味が違ったりと、初心者にはややこしいので、いい変更だと思います
selectorは#selector()で書く形に変更
いままで、イベントなどで呼び出す関数を指定する場合、
button.addTarget(self, action: "buttonDidPush:", forControlEvents: UIControlEvents.TouchUpInside)
と書いていたものが、
button.addTarget(self, action: #selector(buttonDidPush(_:)), forControlEvents: UIControlEvents.TouchUpInside)
と#selector()で書く形になりました。
これに伴い、プログラムを入力している時に対応関数の有無がチェックされるようになりました。ナイス。
for文がガラリと変更
for文の定番の書き方が使えなくなります。これは慣れるのが大変そう・・・
1〜9のループの場合
// いままで for var i = 1; i < 10; i++ { }
// Swift3.0以降 for i in 1 ..< 10 { }
1〜10のループの場合
// いままで for var i = 1; i <= 10; i++ { }
// Swift3.0以降 for i in 1 ... 10 { }
警告がでてもコンパイルは通りますが、これからSwiftで開発するなら3.0の書き方に慣れておいた方がいいですね。
Swiftはバージョンアップする度に構文がちょくちょく変更されるので、Swiftの参考書を書いている人は大変だろうな・・・