我有一个占位符对象,基本上在我的应用程序的上下文中,这个函数从一个地方装载到另一个地方。我给它分配了类型Any,但结果是错误的
'Any' is not convertible to Int我使用的是Any而不是AnyObject,因为它可以携带非对象,比如元组或闭包。在以下情况下有什么建议吗?
var n: Any = 4
n = n * 4发布于 2014-12-15 04:42:35
在强类型语言中,尽早使类型正确是很重要的。否则,您最终将与类型系统的斗争在每一个回合。
在您的例子中,占位符需要是Any,因为它包含任意的数据,但是n是一个Int,应该这样声明。
您的代码应该有这样的感觉:
func processPlaceholder (placeHolder: Any) {
if let n = placeHolder as? Int {
n = n * 4
// ...
}
else if let s = placeHolder as? String {
s = s + "Four"
// ....
}
// ...
}发布于 2014-12-15 02:22:28
如果你知道n是个Int,你就可以把它转换成这样。
var n: Any = 4
n = n as Int * 4N的类型仍然是Any,所以如果您想要执行多个操作,那么每次都必须对其进行强制转换。
发布于 2014-12-15 04:47:42
其他的答案是完全正确的。我只是想澄清一下。
是的,是引擎盖下面的一家旅店。但对编译器来说却不是这样!你把这个东西输入为Any,这就是编译器所知道的。你不能用Any来做算术运算。
如果你坚持把这个东西存储在一个任何,那么你必须转换到一个Int,以便使用它,就像它是一个Int。现在编译器将允许您将其视为Int。只要它真的是个旅店,它也会起作用的。(如果你撒谎而不是Int,那么程序运行时就会崩溃。)
https://stackoverflow.com/questions/27476485
复制相似问题