如何访问存储在 "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
.
但除此之外您无能为力。除了一些实际通用的函数(print
、dump
等),Any
.
真的没有什么可以做的
通用性和实用性存在梯度。一个极端是 Any
。这几乎没用。它不需要任何符合它的类型。但结果,它非常普遍。从字面上看,所有类型都符合它。
另一个极端是像 Int
这样的具体类型。如果您有一个需要 Int
的参数,则只允许一种类型的值:Int
。但这种特殊性会给你带来效用。你知道这个值支持加法、乘法、转字符串等
用 Any
做任何有用的事情的唯一方法是用 as
/as?
/as!
将它向下转换为更严格(不太通用)类型。
我可以很容易地将值存储在 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
.
但除此之外您无能为力。除了一些实际通用的函数(print
、dump
等),Any
.
通用性和实用性存在梯度。一个极端是 Any
。这几乎没用。它不需要任何符合它的类型。但结果,它非常普遍。从字面上看,所有类型都符合它。
另一个极端是像 Int
这样的具体类型。如果您有一个需要 Int
的参数,则只允许一种类型的值:Int
。但这种特殊性会给你带来效用。你知道这个值支持加法、乘法、转字符串等
用 Any
做任何有用的事情的唯一方法是用 as
/as?
/as!
将它向下转换为更严格(不太通用)类型。