gpt4 book ai didi

dictionary - 字符串不可转换为 DictionaryIndex

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:14 25 4
gpt4 key购买 nike

我在 Swift 中使用字典,它需要保存不同类型的值,尽管键几乎都是字符串。这在 Objective-C 中非常容易,但 Swift 通常非常有用的类型安全似乎使这变得更加困难。

我一直在使用 [String: AnyObject] 字典,直到遇到无法将生成的 AnyObject 向下转换为 Swift 字符串的问题,从技术上讲,它不是对象而是值类型。我可以接受它,因为它似乎有道理,尽管如果有办法解决它(除了恢复到我不想做的 NSString 对象),我想知道它。

上面的逻辑解决方案似乎是切换到使用 [String: Any] 字典,但在这样做的过程中,即使是一段基本的代码,我也发现了一个问题:

func abc() {
var dict : [String: Any] = [String: Any]()
if dict["success"] != nil {
...
}
}

上面第3行代码报错:

'String' is not convertible to 'DictionaryIndex<String, Any>'.

现在我似乎有一个字典,其中包含我怀疑我可以根据需要进行向下转换的类型,但它似乎不再可以通过它的键访问,据我所知,它是完全正确的类型(事实上,虽然它是文字,但即使是错误也表明我正在传递一个字符串)。考虑到我实际上想要实现的是具有多种类型的易于访问的值的字典,我实际上缺少什么,我实际上可以在正确的 Swift 类型的 var/let 中检索这些值?

最佳答案

这里的问题似乎是您对 Any 的使用. Dictionary有两种下标方法:

subscript (i: DictionaryIndex<Key, Value>) -> (Key, Value) { get }
subscript (key: Key) -> Value?

编译器错误地假设你想要第一个,然后提示 String您传入的无法转换为 DictionaryIndex<Key, Value> .

要避免此问题,您可以:

  • 强制它使用特定的下标访问器:if dict["success"] as Any? != nil ...

  • 声明你的字典为[String:AnyObject]相反——因为元组不是对象。来自 the guide ,

    • AnyObject can represent an instance of any class type.

    • Any can represent an instance of any type at all, apart from function types.

如果您认为这是一个错误,您不妨 file a bug .

关于dictionary - 字符串不可转换为 DictionaryIndex<String, Any>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272862/

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