読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

Swiftを勉強してみた。その2

Swift

スポンサードリンク

ドットインストールで勉強中。

半分ぐらいで「あ、これ他言語とほとんど一緒じゃん」と舐めた態度で棒スキルチェックを試してみたところ、見事撃沈。

書いたコードはわずか4行で20分もかかった(´Д`;

let input_line = readLine()!
let input_line_int: Int? = Int(input_line)
let result: Int? = 100 - input_line_int!
print(result!)

ハマった理由としては、!とか?とかなんぞや!って思った。

Ruby試したときに破壊的メソッドやら真偽値を返すメソッドってのを思い出す

# ! 破壊的メソッド
# ? 真偽値を返すメソッド

しかしSwiftはどうやら違う意味らしいぞ。

ってなわけで(ドットインストールへ)戻る

dotinstall.com

なぁーるほど

Optionalなわけね。Scalaで一応知っていました。

それを知ったあとでコードを解釈するとこうなるわけね

let input_line = readLine()! // <- readLine()!はnilが入ってこない前提で宣言
let input_line_int: Int? /* <- Optionalなので ? or ! が必要 */ = Int(input_line) // ! なので 取り出すときは ?とか!は必要ない
let result: Int = 100 - input_line_int! // <- ?なので取り出すときは!が必要
print(result)

うむ!

個人的にメモ

  • Optional型はnilを許す -> 急に落ちることを避ける -> ぬるぽ ガッ!
  • 取り出すときはnilチェックしないといけないけど楽に書ける
let name: String? = "aipa"
if let s = name { // <- nameがsに入ったら
  let msg = "hello " + s // <- ここが実行されますー。安全に取り出しているので!マークがないところがポイント
}

上に書いたけど「nilを許す」って理解するとハマるので注意すべき。Scalaのときもめちゃハマったので

qiita.com

これはちょこちょこハマりそうやで。