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

时间:2014-12-18 13:56:02

标签: ios arrays xcode swift

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

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

4 个答案:

答案 0 :(得分:8)

根据您对阵列的控制程度,您可以创建两种对象类型实现的协议。该协议不需要包含任何内容(在Java中是标记接口,不确定Swift中是否有特定名称)。这将允许您将数组限制为只有您想要的对象类型。请参阅下面的示例代码。

protocol MyType {

}


class A: MyType {

}

class B: MyType {

}

var array = [MyType]()

let a = A()
let b = B()

array.append(a)
array.append(b)

答案 1 :(得分:5)

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

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]

答案 2 :(得分:5)

如果您事先知道要存储的内容类型,可以将它们包装在枚举中。与使用[Any/AnyObject]

相比,这使您可以更好地控制类型
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

答案 3 :(得分:2)

您可以使用“type”AnyObject,它允许您在阵列中存储不同类型的对象。如果您还想使用结构,请使用Any

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