gpt4 book ai didi

xcode - Swift 类型推断在这里自相矛盾吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:39 26 4
gpt4 key购买 nike

这是我的测试代码:

var myDict: [String: AnyObject] = ["k":"v"]

var a = myDict["k"]
var b = a as String

var c = myDict["k"] as String

这是我在 Xcode6-beta6 中的 Swift Playground :

Playground

根据类型推断的规则,提示c与不提示b在逻辑上不矛盾吗?

最佳答案

我认为这是一个错误。这里发生的部分原因是 String 不是对象。如果将第一行更改为:

var myDict: [String: Any] = ["k":"v"]

然后一切都很好。因此,鉴于该字符串不是对象,将 AnyObject? 类型的变量转换为 String 肯定会产生错误。而且,由于编译器已经确定 aAnyObject? 类型,它应该提示将 a 转换为 String.

请注意,如果您将最后一行更改为:

var c = myDict["k"] as NSString

错误消失支持问题是 String 不是对象的观点。如果您将 Int 作为数组中的值并尝试将其转换为 Int,您会得到同样的提示。

更新:

所以情节变厚了。如果您不import Foundation 或导入某些导入Foundation 的内容,则会出现其他错误。没有基础:

enter image description here

很明显,其中一些与作为非对象的 String 和作为对象的 NSString 的双重性质以及使用 String 的能力有关Foundation 被导入时作为 NSStrings。

关于xcode - Swift 类型推断在这里自相矛盾吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476354/

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