如何访问存储在 "Any" 类型变量中的值

How can I access values stored in a variable of type "Any"

我可以很容易地将值存储在 Any 类型的变量中,但我不知道如何访问它。

只是简单地尝试将 a 分配给 i 给我这个错误消息:error: cannot convert value of type 'Any' to specified type 'Int'

尝试转换它时出现以下错误消息: error: protocol type 'Any' cannot conform to 'BinaryInteger' because only concrete types can conform to protocols

let a: Any = 1

//this doesn't work
let i: Int = a

//this doesn't work
let i: Int = Int(a)

它不起作用,因为 Int 没有接受 Any 类型的初始化程序。为了让它工作,你需要告诉编译器 a 实际上是一个 Int。你这样做:

let a: Any = 1
let i: Int = a as! Int

编辑: 如果您不确定 a 的类型,则应使用可选类型转换。有很多方法。

let i1: Int? = a as? Int  // have Int? type
let i2: Int = a as? Int ?? 0  // if a is not Int, i2 will be defaulted to 0
guard let i3 = a as? Int else {
    // what happens otherwise
}

您可以访问它。只是 a.

但除此之外您无能为力。除了一些实际通用的函数(printdump 等),Any.

真的没有什么可以做的

通用性和实用性存在梯度。一个极端是 Any。这几乎没用。它不需要任何符合它的类型。但结果,它非常普遍。从字面上看,所有类型都符合它。

另一个极端是像 Int 这样的具体类型。如果您有一个需要 Int 的参数,则只允许一种类型的值:Int。但这种特殊性会给你带来效用。你知道这个值支持加法、乘法、转字符串等

Any 做任何有用的事情的唯一方法是用 as/as?/as! 将它向下转换为更严格(不太通用)类型。