【swift】2.2の変更点(2)
概要
リリースノートをベースに【swift】2.2の変更点を作成しましたが、わかりやすい記事があったので、こちらも紹介します。
++ and -- are deprecated
++、--記法が非奨励になりました。swift 3.0ではエラーになります。
var i = 0 // 非奨励 i++ // 今後はこのように記述します i += 1 i = i + 1
cスタイルのループ記法が使えなくなります。
for var i = 1; i <= 10; i += 1 { print("\(i) green bottles") }
for in構文を使います。
for i in 1...10 { print("\(i) green bottles") }
for in 構文は、開始値<終了値という制約があります。
for var i = 10; i >= 0; i -= 1 { }
この場合、以下のように記述します。
for i in (1...10).reverse() { }
Arrays and other slice types now have removeFirst()
最初の要素を取り出す関数removeFirstが追加されました。removeAtIndex(0)でも同じことができます。
var array = Array(1...10) array.removeFirst() // 1 array.removeLast() // 10 print(array.count) // 8
ただし、removeFirst/removeLastは要素が存在しない場合には実行時エラーになります。
var array = [Int]() array.removeFirst() // 実行時エラー
該当の要素がない場合、nilを返す最後の要素を取得する関数popLastがありますが、popFirstは追加されません。
var array = [Int]() array.popLast() // nil
You can now compare tuples (within reason)
タプルの比較演算子が追加されました。
let singer = ("Taylor", "Swift") let alien = ("Justin", "Bieber") if singer == alien { print("Matching tuples!") } else { print("Non-matching tuples!") }
Tuple splat syntax is deprecated
引数をタプルで渡すことが非奨励になりました。
func describePerson(name: String, age: Int) { print("\(name) is \(age) years old") } let person = ("Taylor Swift", age: 26) describePerson(person)
More keywords can be used as argument labels
一部のキーワードを引数ラベルとして使えるようになりました。
func printGreeting(name: String, repeat repeatCount: Int) { for _ in 0 ..< repeatCount { print(name) } } printGreeting("Taylor", repeat: 5)
var parameters have been deprecated
引数を関数内で変更できるようにするためのキーワードvarが非奨励になりました。値を変更する場合には、別変数を使います。
func printGreeting(var name: String, repeat repeatCount: Int) { // 値を変更できる name = name.uppercaseString for _ in 0 ..< repeatCount { print(name) } } printGreeting("Taylor", repeat: 5)
変数を別途作成します。
func printGreeting(name: String, repeat repeatCount: Int) { // 新しい変数に値をセットします。 let upperName = name.uppercaseString for _ in 0 ..< repeatCount { print(upperName) } } printGreeting("Taylor", repeat: 5)
Renamed debug identifiers: #line, #function, #file
swift 2.1以前では、__LINE__や__FUNCTION__のシンボルが行数、関数名に置換されました。2.2移行では、#line, #functionになります。
func printGreeting(name: String, repeat repeatCount: Int) { // old - deprecated! print("This is on line \(__LINE__) of \(__FUNCTION__)") // new - shiny! print("This is on line \(#line) of \(#function)") let upperName = name.uppercaseString for _ in 0 ..< repeatCount { print(upperName) } } printGreeting("Taylor", repeat: 5)
Stringified selectors are deprecated
文字列セレクタが非奨励になりました。
以下の例だと、セレクタを#selector(buttonTapped)と記述します。もし、関数buttonTappedがなければコンパイルエラーになります。
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Tap!", style: .Plain, target: self, action: "buttonTaped")
Compile-time Swift version checking
コンパイル時にバージョンチェックできるビルドオプションが追加されました。
#if swift(>=2.2) print("Running Swift 2.2 or later") #else print("Running Swift 2.1 or earlier") #endif
New documentation keywords: recommended, recommendedover, and keyword
swiftはmarkdown形式のドキュメントを書くことができます。
/** Say hello to a specific person - parameters: - name: The name of the person to greet - returns: Absolutely nothing - authors: Paul Hudson Bilbo Baggins - bug: This is a deeply dull function */ func sayHello(name: String) { print("Hello, \(name)!") } sayHello("Bob")
Swift 2.2で、3つのキーワードが追加されました。recommended, recommendedover, keyword。 Xcode 7.3では、このキーワードを追加しても何も変わりません。