gpt4 book ai didi

arrays - 是什么让 Swift 认为 [String] 是 Int?

转载 作者:行者123 更新时间:2023-11-28 11:22:14 25 4
gpt4 key购买 nike

我可以写一些简短有效的代码示例:

var array = ["one","two"];
var name = array[0];

一切正常。没有错误。 name现在包含 one .

现在假设我写:

var array = ["one","two"];
var name = array["0"];

是一个错误,原因很清楚:数组不是字典,我应该通过索引访问它的内容。

但是为什么错误说“类型 Int 不符合协议(protocol)ExtendedGraphemeClusterLiteralConvertible

为什么 Int , 如果是 [String]


顺便说一句,如果我以另一种方式产生错误

var array = ["one":0,"two":1];
var name = array[0];

很明显:“类型DictionaryIndex<String, Int>不符合协议(protocol)IntegerLiteralConvertible

最佳答案

该错误消息是因为您提供的是字符串文字,而不是 String 的实例类型,编译器期望 Int (因为这是 Array 的下标方法接受的)。编译器将字符串文字转换为类型实例的方式 Int就是使用StringLiteralConvertible中的一个方法或 ExtendedGraphemeClusterLiteralConvertible协议(protocol),因此它检查是否 Int类型符合其中之一。自 Int 符合,您会看到您看到的错误消息。

这解释了 Daniel T 的附加信息:

var array = ["one","two"]
array["0"] // trying to convert string literal to Int

var foo: Int = "0" // trying to convert string literal to Int

var index = "0"
array[index] // trying to convert String instance to Int

同样,您的最后一个示例显示编译器尝试做同样的事情——尝试将整数文字 转换为DictionaryIndex<String, Int> 的实例。 , 因为 Dictionary实例的下标可以传递给该字典的 Key 的实例。输入一个DictionaryIndex<Key, Value> .

关于arrays - 是什么让 Swift 认为 [String] 是 Int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26818856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com