それでもSwiftは面白い
始めてSwiftに触れてみていますが、少し違和感感じる書き方がちょこちょこ出てきています。
まず手始めに、Appleのドキュメントに書いてあることから始めました。
そこで個人的に違和感を感じた箇所のまとめと、Swiftを触ってみた雑感を書き記しておきたいと思います。
optional
var optionalName: String? = "John Appleseed" var greeting ="Hello!" if let name = optionalName { greeting = "Hello, \(name)" }
まず、上記の書き方ですが、if文で判定しつつ、定数に代入してます。
一見気持ち悪いような感じがしますが、optionalNameにnilが入っている場合、このif文内には入らないということです。
関数の書き方
func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)." } greet("Bob", day: "Tuesday")
関数の宣言方法ですが、パラメータは変数名と型を、返り値は型を宣言することになったようです。
Objective-cよりは分かりやすいかな。
tuple
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) { var min = scores[0] var max = scores[0] var sum = 0 for score in scores { if score > max { max = score } else if score < min { min = score } sum += score } return (min, max, sum) } let statistics = calculateStatistics([5, 3, 100, 3, 9]) print(statistics.sum) print(statistics.2)
tupleでも返せるようになったと。
これは便利そう!
関数での配列パラメータ
func sumOf(numbers: Int...) -> Int { var sum = 0 for number in numbers { sum += number } return sum } sumOf() sumOf(42, 597, 12)
直接、配列を受け取ったりすることも。
関数自体を受け渡す
func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool { for item in list { if condition(item) { return true } } return false } func lessThanTen(number: Int) -> Bool { return number < 10 } var numbers = [20, 19, 7, 12] hasAnyMatches(numbers, condition: lessThanTen)
関数自体を変数として受け渡す例。
一瞬頭がフリーズしそうになった。関数自体を受け渡す際に、型名を合わせて宣言しないといけない模様。
var numbers = [20, 19, 7, 12] numbers.map({ (number: Int) -> Int in return 3 * number })
numbersの値を全て3倍したものがnumbersに代入されるという結果になる。
Objective-Cが嫌いな言語だったので、これからどんどんSwiftが発展してくれることを願って止みません。