1.在 Swift 中,Any
是一个特殊的类型,代表所有类型的实例。它可以存储任何类型的值,包括基本数据类型、对象、结构体、闭包等。
2.AnyObject,
它只能存储类的实例,而不能存储结构体或枚举。
3.Any
包括所有类型(包括结构体和枚举),而 AnyObject
仅限于引用类型。
class Person {
var name: String
init(name: String) {
self.name = name
}
}
struct Student {
var age: Int
init(age: Int) {
self.age = age
}
}
var a: Any = 100
print(type(of: a)) //Int
var b:Any = true
print(type(of: b)) //Bool
var c:Any = Person(name: "swift")
print(type(of: c)) //Person
var d:Any = Student(age: 12)
print(type(of: d)) //Student
var e:AnyObject = Person(name: "ios")
print(type(of: e)) //Person
var mixedArray: [Any] = []
mixedArray.append(1) // 整数
mixedArray.append("Hello") // 字符串
mixedArray.append(3.14) // 浮点数
mixedArray.append(true) // 布尔值
print(mixedArray) // [1, "Hello", 3.14, true]
for item in mixedArray {
if let number = item as? Int {
print("整数: \(number)") // 整数: 1
} else if let text = item as? String {
print("字符串: \(text)") // 字符串: Hello
} else if let value = item as? Double {
print("浮点数: \(value)") // 浮点数: 3.14
} else if let boolean = item as? Bool {
print("布尔值: \(boolean)") // 布尔值: true
}
}
注:1.
在 Swift 中,as?
是用于类型转换的操作符之一,具体用于条件向下转型。
2.as?
用于尝试将某个类型的实例转换为另一种类型(通常是它的子类型),并返回一个可选值。如果转换成功,返回目标类型的实例,否则返回 nil
。