いまいちピンときていない。とりあえずログをメモ
let first: [String] = ["10", "20"] // 足し算する // でも当たり前だが、型が違うのでエラーになる // main.swift:6:25: error: cannot convert value of type 'String' to expected argument type 'Int' //let result1: Int = first[0] + first[1] // キャストしてあげる // しかしそれでもエラーとなる // main.swift:12:20: error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'? // main.swift:12:36: error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'? //let result1: Int = Int(first[0]) + Int(first[1]) // 覗いてご覧 print(first[0]) // 10 print(Int(first[0])) // Optional(10) <- ?!! // let first2: Int = Int(first[0]) // main.swift:17:19: error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'? let first2: Int = Int(first[0])! // 10 let first3: Int? = Int(first[0]) // Optional(10) let first4: Int? = Int(first[0])! // Optional(10) // ということは、アンラップしてあげればおk let result1: Int = Int(first[0])! + Int(first[1])! print(result1) // 30 // Intで足し算してOptional型へ let result2: Int? = Int(first[0])! + Int(first[1])! print(result2) // Optional(30)
どうやらInt
は勝手にOptional型になるようです。(本当かな。。。?)
しかし、宣言の型は?
を付与しないとOptional型にならないっぽい