ドットインストールで勉強中。
半分ぐらいで「あ、これ他言語とほとんど一緒じゃん」と舐めた態度で棒スキルチェックを試してみたところ、見事撃沈。
書いたコードはわずか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はどうやら違う意味らしいぞ。
ってなわけで(ドットインストールへ)戻る
なぁーるほど
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)
うむ!
個人的にメモ
let name: String? = "aipa" if let s = name { // <- nameがsに入ったら let msg = "hello " + s // <- ここが実行されますー。安全に取り出しているので!マークがないところがポイント }
上に書いたけど「nilを許す」って理解するとハマるので注意すべき。Scalaのときもめちゃハマったので
これはちょこちょこハマりそうやで。