Swift:将多个类型存储在一个数组中

时间:2016-07-15 04:45:36

标签: ios arrays swift

如何在单个数组中存储多个类型?

我正在做以下事情:

PHP

我应该如何实现这一目标?我是Swift / iOS的新手。

5 个答案:

答案 0 :(得分:5)

您可以像这样创建string汽车并直接存储汽车对象,而不是创建array array

var cars = [Car]()
let mustang = Car() // car is a class name
mustang.brandName = "Ford"
mustang.modelName = "Mustang" // string type
mustang.modelYear = 1968
mustang.isConvertibible = true
mustang.isHatchback = false
mustang.hasSunroof = false // bool type
mustang.numberOfDoors = 2 // int type
mustang.powerSource = "gas engine"   
cars.append(mustang)  

或者,如果您要存储不同类型的object,则无法创建array的{​​{1}},因此它将存储任何类型的AnyObject或{{1在那个数组里面。

instance

答案 1 :(得分:2)

根据Swift文档:

  

AnyObject 可以表示任何类类型的实例。

     

任何都可以代表任何类型的实例,包括函数类型。

所以你可以制作一个

数组

var vehicles = [AnyObject]()

这将采用任何类型的对象(类实例)。

但是,文档继续说:

  

仅当您明确需要它们提供的行为和功能时,才使用任何 AnyObject 。最好具体了解您希望在代码中使用的类型。

因此,理想情况下,您具体了解阵列可以容纳的类型。

答案 2 :(得分:2)

雨燕5

使用面向协议的编程

一个更快捷的解决方案是使用协议。这是类型安全的,因此您不必处理展开和强制转换可选项。

1。定义协议

protocol ModeOfTransportation {
    // Define anything in common between objects
    // Example:
    var color: UIColor { get set }
}

2。使您的模型符合协议

(编译器将确保为您提供正确的类型:例如颜色)

struct Car: ModeOfTransportation {
    var color = UIColor.red
}

struct Bicycle: ModeOfTransportation {
    var color = UIColor.blue
}

3。为您的阵列指定协议类型

class Example {
    var myTransportList: [ModeOfTransportation] = []

    func addModesOfTransport() {
        let car = Car()
        let bike = Bicycle()

        myTransportList.append(car)
        myTransportList.append(bike)
    }
}

答案 3 :(得分:1)

我认为你做错了什么。

数组设计只能容纳一种类型的东西。如果你真的想要持有不同类型的东西。这是一些可能的方法:

  1. 您可以尝试创建AnyObject s:
  2. 的数组

    -

    var vehicles = [AnyObject]()
    

    如果您要存储的类型不符合AnyObject,则无效。如果您有这种类型,则必须使用Any

    1. 您可以创建一个字符串数组并将您要存储的所有值转换为字符串

    2. 您可以创建一个Car数组来存储汽车的所有属性。然后你可以在以后添加更多汽车。我认为这就是你的意图。

答案 4 :(得分:-1)

在Swift 4中,我相信您可以执行以下操作:

让myConstantArray = [15,17.9,“ Hello <3 World”]设置为[Any]

此数组存储任何类型。