Swift:一个数组中的不同对象?

是否有可能在一个数组中有两个不同的自定义对象?

我想在UITableView显示两个不同的对象,我认为这样做的最简单方法是将所有对象放在一个数组中。

根据您希望通过arrays进行多less控制,您可以创build一个两种对象types都可以实现的协议。 该协议不需要有任何东西(将在Java中的标记接口,不知道是否在Swift中有一个特定的名称)。 这将允许您将数组限制为您所需的对象types。 请参阅下面的示例代码。

 protocol MyType { } class A: MyType { } class B: MyType { } var array = [MyType]() let a = A() let b = B() array.append(a) array.append(b) 

如果您知道事先存储的types,则可以将它们包装在一个枚举中。 这使您比使用[Any/AnyObject]更能控制types:

 enum Container { case IntegerValue(Int) case StringValue(String) } var arr: [Container] = [ .IntegerValue(10), .StringValue("Hello"), .IntegerValue(42) ] for item in arr { switch item { case .IntegerValue(let val): println("Integer: \(val)") case .StringValue(let val): println("String: \(val)") } } 

打印:

 Integer: 10 String: Hello Integer: 42 

您可以使用AnyObject数组来保存同一数组中的任何types的对象:

 var objectsArray = [AnyObject]() objectsArray.append("Foo") objectsArray.append(2) // And also the inmutable version let objectsArray: [AnyObject] = ["Foo", 2] // This way you can let the compiler infer the type let objectsArray = ["Foo", 2] 

您可以使用“types” AnyObject ,它允许您将不同types的对象存储在数组中。 如果您还想使用结构,请使用Any

 let array: [Any] = [1, "Hi"]