是否有可能在一个阵列中有两个不同的自定义对象?
我想在UITableView
中显示两个不同的对象,我认为最简单的方法是将所有对象放在一个数组中。
答案 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"]