我想将不同类型的对象存储在一个数组中。下面的程序只是一个最小的演示。在 anyArray:[Any] 中存储了 Object1 的一个实例。print 语句打印出预期的对象类型。在下一行中,存储对象类型的测试返回 true。这意味着,在运行期间,正确的对象类型是已知的,并且一切似乎都很好。
class Object1 {
var name = "Object1"
}
var anyArray:[Any] = [Object1()]
print("\(type(of: anyArray[0]))")
let testResult = anyArray[0] is Object1
print("Test result:\(testResult)")
//print("Name:\((anyArray[0]).name)")
Console output:
Object1
Test result:true
但是,如果我尝试打印出对象的 name 属性,我会从编辑器中收到一条错误消息:
Value of type 'Any' has no member 'name'
好吧,在编译时对象的类型是未知的。这就是编译器抱怨的原因。如何告诉编译器可以访问存储对象的属性?