Swift: different objects in one array?

后端 未结 4 1108
鱼传尺愫
鱼传尺愫 2021-02-06 14:06

Is there a possibility to have two different custom objects in one array?

I want to show two different objects in a UITableView and I think the easiest way

相关标签:
4条回答
  • 2021-02-06 14:47

    Depending on how much control you want over the array, you can create a protocol that both object types implement. The protocol doesn't need to have anything in it (would be a marker interface in Java, not sure if there is a specific name in Swift). This would allow you to limit the array to only the object types you desire. See the sample code below.

    protocol MyType {
    
    }
    
    
    class A: MyType {
    
    }
    
    class B: MyType {
    
    }
    
    var array = [MyType]()
    
    let a = A()
    let b = B()
    
    array.append(a)
    array.append(b)
    
    0 讨论(0)
  • 2021-02-06 14:52

    If you know the types of what you will store beforehand, you could wrap them in an enumeration. This gives you more control over the types than using [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)")
      }
    }
    

    Prints:

    Integer: 10
    String: Hello
    Integer: 42
    
    0 讨论(0)
  • 2021-02-06 14:55

    You can use the "type" AnyObject which allows you to store objects of different type in an array. If you also want to use structs, use Any:

    let array: [Any] = [1, "Hi"]
    
    0 讨论(0)
  • 2021-02-06 15:01

    You can use AnyObject array to hold any kind of objects in the same array:

    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]
    
    0 讨论(0)
提交回复
热议问题