这是我的代码:
var productsList:[Product]
switch category {
case 0:
productsList = self.sharedInstance.productsList1
case 1:
productsList = self.sharedInstance.productsList2
default:
productsList = self.sharedInstance.productsList3
}
for productDic in products {
let product = Product()
// Set product attributes here.
productsList.append(product)
}
println(productsList)
println(self.sharedInstance.productsList1)
println(self.sharedInstance.productsList2)
println(self.sharedInstance.productsList3)
输出:
productsList
包含一些添加的内容productsList1
,productsList2
和productsList3
都是空的。 根据我的理解,productsList应根据类别引用productsList1,productsList2和productsList3之一。
有人可以解释为什么productsList1,productsList2和productsList3都是空的吗?
提前致谢。
答案 0 :(得分:3)
从sharedInstance分配数组会导致正在复制的数组。
进行更新后,您需要将更新的数组重新分配给sharedInstance数组。
作为一个最小的例子:
@interface TabController ()
@property (nonatomic, retain) UIView * circleView;
@end
将导致输出:
“[String1,String2,String3]” “[String1,String2,String3,String4]”
您需要添加重新分配才能使列表匹配:
var list:[String] = []
list.append("String1")
list.append("String2")
list.append("String3")
var list2:[String] = list
list2.append("String4")
println(list)
println(list2)
您还可以通过在分配后打印每个列表的地址并显示它们不同来演示副本。
//...
list2.append("String4")
list = list2
println(list)
println(list2)
或者您可以检入调试器。
如果要专门对阵列的sharedInstance副本进行操作,可以执行以下操作之一:
你也可以使用NSMutableArray,虽然它可能不是最好的想法混合旧的和新的。