LoginSignup
11
9

More than 5 years have passed since last update.

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

Posted at
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?)]
11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9