如何在单个数组中存储多个类型?
我正在做以下事情:
PHP
我应该如何实现这一目标?我是Swift / iOS的新手。
答案 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)
一个更快捷的解决方案是使用协议。这是类型安全的,因此您不必处理展开和强制转换可选项。
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)
我认为你做错了什么。
数组设计只能容纳一种类型的东西。如果你真的想要持有不同类型的东西。这是一些可能的方法:
AnyObject
s:-
var vehicles = [AnyObject]()
如果您要存储的类型不符合AnyObject
,则无效。如果您有这种类型,则必须使用Any
。
您可以创建一个字符串数组并将您要存储的所有值转换为字符串
您可以创建一个Car
数组来存储汽车的所有属性。然后你可以在以后添加更多汽车。我认为这就是你的意图。
答案 4 :(得分:-1)
在Swift 4中,我相信您可以执行以下操作:
让myConstantArray = [15,17.9,“ Hello <3 World”]设置为[Any]
此数组存储任何类型。