swift中的任何类型并转​​换为Int

时间:2014-12-15 02:19:05

标签: swift

我是一个占位符对象,基本上在我的应用程序的上下文中,该函数将播放从一个地方带到另一个地方。我已经为它分配了类型Any但它最终错误

'Any' is not convertible to Int

我使用Any而不是AnyObject,因为它可以携带非对象以及元组或闭包。在下列情况下有任何建议吗?

var n: Any = 4

n = n * 4

3 个答案:

答案 0 :(得分:1)

在强类型语言中,尽早确保您的类型正确非常重要。否则你最终会在每个回合中与类型系统作斗争。

在您的情况下,正如您所描述的,占位符必须为Any,因为它带有任意数据 - 但nInt并且应该声明为func processPlaceholder (placeHolder: Any) { if let n = placeHolder as? Int { n = n * 4 // ... } else if let s = placeHolder as? String { s = s + "Four" // .... } // ... }

您的代码应该有这样的感受:

{{1}}

答案 1 :(得分:0)

如果你知道n是一个Int,你可以这样投射它。

var n: Any = 4
n = n as Int * 4

n仍然是Any类型,所以如果你想做多个操作,你每次都必须抛出它。

答案 2 :(得分:0)

其他答案是完全正确的。这只是为了澄清。

是的,它是一个Int引擎盖。但就编译器而言并非如此!你已经把这个东西打成了Any,这是所有编译器都知道的。并且您无法使用Any进行算术运算。

如果你坚持将这个东西存储在Any中,那么你必须强制向下渲染到Int,以便像使用它一样使用它。现在,编译器将允许您将其视为Int。它也会起作用,只要它真的 是一个Int。 (如果你撒谎并且它不是Int,那么当程序运行时你会崩溃。)