var contactSectionItemList:[ContactSectionItem] insertContactItemToList(friendItem, contactSectionItemList: contactSectionItemList, isSpecialSectionToOmit: self.isFixedTopSection, afterInsertContactItemHandler: gContactVC.scrollNewAddedContactItem) func insertContactItemToList(newContactItem:ContactItem, var contactSectionItemList:[ContactSectionItem], isSpecialSectionToOmit:((contactSectionItem:ContactSectionItem) -> Bool)?, afterInsertContactItemHandler:((sectionIdx:Int, rowIndex:Int) -> Void)) { |
然后调用之后,list:
contactSectionItemList
没变化。。
所以要去:
swift array parameter reference
Swift: Pass array by reference? – Stack Overflow
Is Swift Pass By Value or Pass By Reference – Stack Overflow
所以,去改为:
insertContactItemToList(friendItem, contactSectionItemList: &contactSectionItemList, isSpecialSectionToOmit: self.isFixedTopSection, afterInsertContactItemHandler: gContactVC.scrollNewAddedContactItem) func insertContactItemToList(newContactItem:ContactItem, inout contactSectionItemList:[ContactSectionItem], isSpecialSectionToOmit:((contactSectionItem:ContactSectionItem) -> Bool)?, afterInsertContactItemHandler:((sectionIdx:Int, rowIndex:Int) -> Void)) { |
即可。
Value and Reference Types – Swift Blog – Apple Developer
[总结]
Swift中是引用类型的:
类的实例
函数
其他所有的都是传值类型:
- 结构体struct
- 枚举enum
- 字符串String
- 数组Array
想要把传值变成传递引用,可加上参数inout
推荐,如果想要用:
值value类型:
- 互相用==比较
- 拷贝出来的值是独立的状态,互相不影响的
- 数据被用于多个不同线程中的
引用reference类型:
- 互相用===比较
- 想要创建共享的,可被改变的状态
转载请注明:在路上 » [已解决]swift函数数组参数传递引用