var arr: [(firstname: String, lastname: String?)] = []
という配列があったとしよう。
arr.append(firstname: "taro", lastname: nil)
println(arr)
// output: [(taro, nil)]
これは問題なく通る。
なのに、String を指定するとエラーになる:
arr.append(firstname: "taro", lastname: "yamada")
repl.swift:5:11: error: type 'T' does not conform to protocol 'IntegerLiteralConvertible'
arr.append(firstname: "taro", lastname: "yamada")
+=
でももちろんダメ:
arr += [(firstname: "taro", lastname: "yamada")]
repl.swift:5:1: error: '[(firstname: String, lastname: String?)]' is not identical to 'UInt8'
だいたい UInt8
って...
初期化だとどうかなとやってみると、
var arr1: [(firstname: String, lastname: String?)] = [(firstname: "hanako", lastname: "suzuki")]
println(arr1)
// output: [(hanako, Optional("suzuki"))]
通るじゃないか。ん? Optional
... もしや...
arr.append(firstname: "taro", lastname: Optional("yamada"))
println(arr)
// output: [(taro, nil), (taro, Optional("yamada"))]
そういうことか!
ちなみに as してもいけた
arr += [(firstname: "hanako", lastname: "suzuki") as (firstname: String, lastname: String?)]