Swift - Any、AnyObject
2022-03-19 本文已影响0人
aven_kang
Any : 可以代表任意类型(枚举,结构体,类,也包括函数类型)
AnyObject : 可以代表任意类类型(在协议后面写上:AnyObject代表只有类能遵守这个协议)

class student : Runnable {}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var test : Any = 10
test = "jack"
test = student()
}
}
Any类型的,基本上都可以赋值给这个对象,但如果是AnyObject类型的,只能是类去赋值
var inst1 = Array<Any>() // 数组
var inst2 = [Any](). //数组
var inst3 = Dictionary<String,String>() // 字典
var inst4 = [String:String]() // 字典
protocol Runnable {}
class Person {}
class student : Person,Runnable {
func study() {
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var stu:Any = 10
(stu as? student)?.study()
}
}
在(stu as? student)这里中,为什么使用as?,as意思是强制转换,而stu是any类型,也就是,转换可能失败所以使用as?,而后面的(stu as? student)?这个问号,主要是因为前面as?可能转换失败,那么这里必然不可能强制解包的,也是可选类型的。