最新消息:20210917 已从crifan.com换到crifan.org

[已解决]swift函数数组参数传递引用

Swift crifan 2838浏览 0评论
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函数数组参数传递引用

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
94 queries in 0.192 seconds, using 23.35MB memory