在 Swift 中添加两个不同类型的数组有更优雅的方法吗?
我的第一个尝试是将数组向下转换为 Any 并添加它。
class BasicClass {
var name : String = ""
var number : Int = -1
init(name : String, number : Int){
self.name = name
self.number = number
}
}
let basicClass1 = BasicClass(name: "bc1", number: 1)
let basicClass2 = BasicClass(name: "bc2", number: 2)
let basicClass3 = BasicClass(name: "bc3", number: 3)
let basicClasses : [BasicClass] = [basicClass1, basicClass2, basicClass3]
for bc in basicClasses{
print(bc.name)
}
let strings : [String] = ["one", "two", "three"]
var anyArray : [Any] = strings as [Any] + basicClasses as [Any]
我问的是最后一行。
最佳答案
以这种方式创建 [Any]
在 Swift 中是一个错误。有一些地方 [Any]
会因为桥接到 Cocoa 而弹出,但你永远不应该单独创建它们。你的意思是“绝对是任何东西的数组”是非常罕见的。如果您的意思不是“绝对任何东西都可以”,那么您并不是指 Any
。 (举个例子,考虑一下 print
,它正确地接受“absolutely anything at all”。)
如果您想要“字符串数组或 BasicClasses”,那么有一个类型可以满足。这是一个枚举:
enum Element {
case basicClass(BasicClass)
case string(String)
}
let combined = strings.map(Element.string) + basicClasses.map(Element.basicClass)
这会将您的字符串和 BasicClasses 包装在 Element 类型中,然后创建一个 [Element]
。
(请注意,我在这里使用 +
来组合数组,因为在这种情况下它非常方便,但它会在编译时间上产生重大问题,而且效率低下,因为它经常强制许多副本。您通常应该避免使用 +
来表示除数字以外的任何内容。但在这个示例中,它比使用 .extend
的替代方案要漂亮得多。)
关于arrays - 添加不同类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083738/