在Swift中从Dictionary中读取时的Downcast元素

在Swift中从Dictionary中读取时的Downcast元素,第1张

概述我正在尝试访问一个元素一个字典元素并将其向下转换为AnyObject以外的类型,但不断得到相同的编译器错误:无法找到接受所提供参数的’下标’的重载. 我知道我可以使用两个if语句这样做: if let x = dict["key"] { if let y = x as? String { // ... }} 但我觉得必须有一个比这更优雅的解决方案.对我来说最有意义 我正在尝试访问一个元素一个字典元素并将其向下转换为AnyObject以外的类型,但不断得到相同的编译器错误:无法找到接受所提供参数的’下标’的重载.

我知道我可以使用两个if语句这样做:

if let x = dict["key"] {    if let y = x as? String {        // ...    }}

但我觉得必须有一个比这更优雅的解决方案.对我来说最有意义的格式是:

if let x = dict["key"] as? String {    // ...}

但这只会导致上面提到的错误.我已经尝试了几十种变体,但似乎没有任何差异.这是在Swift中无法完成的吗?

解决方法 你想要的配方不起作用的原因是你试图用一个单独的打开两个选项.有两个Optionals,因为您的字典的下标和尝试转换为String都返回可选值.在一个if语句中没有办法在运行时安全,但有一种方法:

if let x = dict["key"]! as? String {    println(x)}

问题是如果dict [“key”]最终为nil,强制解包会使你的应用程序崩溃.最好这样做(你可以跳过第一个if),即使它是一个额外的步骤:

let x: AnyObject? = dict["key"]if let y = x as? String {    println(y)}

额外的步骤只是使用Dictionary< String,AnyObject>的成本. – 如果您可以更具体地获得字典类型,则不必再进行此 *** 作.

总结

以上是内存溢出为你收集整理的在Swift中从Dictionary中读取时的Downcast元素全部内容,希望文章能够帮你解决在Swift中从Dictionary中读取时的Downcast元素所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/999741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存