タプルの配列、への append が失敗する

  • 10
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。
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?)]