我基本上有两种方法:
private func addBagToCollection(bag : VendorBag){
var array = arrayForService(bag.type)
array.append(bag)
}
和
func arrayForService(type : BAG_TYPE) -> Array<VendorBag>{
switch type{
case .bagTypeDryCleaning:
return dcBags
case .bagTypeWashAndFold:
return wfBags
case .bagTypeLaunderedShirt:
return lsBags
case .bagTypeHangDry:
return hdBags
case .bagTypeUnknown:
return unBags
}
}
问题是addBagToCollection
中引用的数组不保存附加项,这意味着每次调用方法时,数组的大小都为0.
我在课程顶部初始化我的所有数组:
var hdBags : Array<VendorBag> = [VendorBag]()
var wfBags : Array<VendorBag> = [VendorBag]()
var lsBags : Array<VendorBag> = [VendorBag]()
var dcBags : Array<VendorBag> = [VendorBag]()
var unBags : Array<VendorBag> = [VendorBag]()
但由于某种原因,arrayForService
函数似乎只返回数组的副本或新初始化的数组。如何返回对该数组的引用,以便在退出函数后仍保留对它的所有更改?
获取更多信息:
所以从functions -
返回时,似乎确实复制了数组Swift’s Array types are implemented as structures. This means that arrays
are copied when they are assigned to a new constant or variable, or when they are passed to a function or method.
那么如何返回对实际数组的引用而不是它的副本?
谢谢!
答案 0 :(得分:4)
与NSArray
类不同,Swift数组是struct
类型,这意味着它们在传递给函数时会被复制。
来自docs:
注意强>
结构在代码中传递时始终复制,并且不使用引用计数。
如果您希望通过引用而不是通过复制传递数组,则需要使用inout
关键字:
private func addBagToCollection(inout array: Array<VendorBag>, bag: VendorBag) {
array.append(bag)
}
您可以按如下方式调用该函数:
addBagToCollection(&arrayForService(bag.type), bag)