函数退出后不保留Array的更改

时间:2015-11-05 19:46:19

标签: ios arrays swift

我基本上有两种方法:

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.

那么如何返回对实际数组的引用而不是它的副本?

谢谢!

1 个答案:

答案 0 :(得分:4)

NSArray类不同,Swift数组是struct类型,这意味着它们在传递给函数时会被复制。

来自docs

  

注意

     

结构在代码中传递时始终复制,并且不使用引用计数。

如果您希望通过引用而不是通过复制传递数组,则需要使用inout关键字:

private func addBagToCollection(inout array: Array<VendorBag>, bag: VendorBag) {
  array.append(bag)
}

您可以按如下方式调用该函数:

addBagToCollection(&arrayForService(bag.type), bag)