我可以写一些代码短而有效的例子:是什么让Swift认为[String]是Int?
var array = ["one","two"];
var name = array[0];
一切正常。没有错误。 name
现在包含one
。
现在假设我写:
var array = ["one","two"];
var name = array["0"];
它将是一个错误,它清楚为什么:数组不是一本字典,我应该通过索引来访问它的内容。
但为什么没有错误说“类型Int
不符合协议ExtendedGraphemeClusterLiteralConvertible
?
为什么Int
,如果是[String]
?
顺便说一句,如果我产生另外一个错误way
var array = ["one":0,"two":1];
var name = array[0];
很明显:“类型DictionaryIndex<String, Int>
不符合协议IntegerLiteralConvertible
“
因为数组索引应该是一个String类型,并且传递一个类型为String的参数意味着(它符合“ExtendedWhatever”长协议名称,无论它是什么)它不会找到匹配协议一致性。你是对的,如果错误信息反过来(或者抱怨'String'不符合固有的'Int'-ish'),那么错误信息可能会更直观,但嘿就是它的实现方式。 – 2014-11-08 15:45:23