假设某些可能很大的代码块需要使用数组A或数组B而不是编写
switch (x) {
case a:
arrayA.append(X)
case b:
arrayB.append(X)
}
我想写类似下面的C ++代码:
auto& arr = (x == a ? arrayA : arrayB);
arr.push_back(X);
当然,在现实生活中,案例并不那么简单,但我希望你明白这一点:我只想设置一次引用,之后不关心我正在使用哪个数组。
答案 0 :(得分:1)
我不知道有任何获取数组指针的方法 - 使用inout
修饰符传递引用的唯一情况是函数参数。
然而,闭包非常灵活,并且可以通过多种方式使用 - 我认为这是其中一种情况。我的想法是创建2个闭包,第一个附加到arrayA
,第二个附加到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]