それでも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が発展してくれることを願って止みません。