2014-09-29 109 views
1

假設的代碼一些潛在的大塊需要有一個數組,或者是陣列A或B.數組而不是寫Swift是否有類似C++引用的東西?

switch (x) { 
 
case a: 
 
    arrayA.append(X) 
 
case b: 
 
    arrayB.append(X) 
 
}

我想寫點東西像下面的工作C++代碼:

auto& arr = (x == a ? arrayA : arrayB); 
 
arr.push_back(X);

當然,在現實生活中,案件並不那麼簡單,但我希望你明白:我想只設置參考一次,之後不關心我正在使用哪個陣列。

回答

1

我不知道有任何方法來獲取數組指針 - 唯一的情況是,使用inout修飾符傳遞引用是一個函數參數。

然而,封閉是非常靈活和可用的幾種方式 - 我認爲這是其中的一種情況。我們的想法是創建2封,第一附加到arrayA,第2至arrayB,然後保存您想在一個變量來使用封閉,並使用它:

typealias PushToArrayClosure = (value: Int) -> Void 

var arrayA = [1, 2, 3] 
var arrayB = [4, 5, 6] 
let condition = false 

let pushA = { (value: Int) in 
    arrayA.append(value) 
} 

let pushB = { (value: Int) in 
    arrayB.append(value) 
} 

let pushToArray: PushToArrayClosure = condition ? pushA : pushB 

pushToArray(value: 7) 

arrayA // contains [1, 2, 3] 
arrayB // contains [4, 5, 6, 7] 
相關問題