2017-09-06 67 views
0

是否有更優雅的方式在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] 

我在問最後一行。

+0

你將如何使用數組中的數據?兩個陣列會相互關聯嗎?或者你只是想將它們組合成一個數組? – OverD

+0

我只是想結合他們。例如,我可以通過「if let」訪問字符串和類 – codddeer123

回答

3

以這種方式創建[Any]是Swift中的一個錯誤。 由於橋接到Cocoa而彈出,但你不應該獨立創建它們。你的意思是「一系列絕對的東西」是非常罕見的。如果你的意思不是「絕對沒有問題」,那你的意思不是Any。 (對於一個例子,這意味着,考慮print,它正確接受「絕對任何東西」。)

如果你想要「一個字符串或BasicClasses數組」,那麼有一個類型。這是一個枚舉:

enum Element { 
    case basicClass(BasicClass) 
    case string(String) 
} 

let combined = strings.map(Element.string) + basicClasses.map(Element.basicClass) 

這種包裝你的字符串,你BasicClasses的元素類型,然後創建一個[Element]。 (請注意,我在這裏使用了+來組合數組,因爲在這種情況下它非常方便,但是它可能會在編譯時造成重大問題,而且效率低下,因爲它經常需要太多副本。避免使用+來代替數字,但在這個例子中,它比使用.extend的替代品更漂亮。)