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"]
- 如何使用EVURLCache在PreCache中加载UIWebView
- 反转范围会导致不匹配的types
- iOS版。 CLLocationManager只在didUpdateLocations中接收位置更新一次
- 将对象映射到用于TableView部分的2D数组Swift
- 带有AVAudioPlayer的SKEmiterNode用于音乐视觉效果
- 使用Swift在一个ViewController中强制横向模式
- Swift中可选的包装,为什么Swift将“可选”添加到string
- Python“还是”等价于Swift?
- AppDelegate.swift函数转换为swift后返回错误3(不能转换为PFBooleanResultBlock?)?