Swiftを始めてみて、個人的に違和感のある書き方まとめと雑感

Swift

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

コメントを残す