本文介绍了斯威夫特数组传值...相同的内存地址?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

有人可以请清除此为我说话。

我的理解(思维)斯威夫特传递数组按值,因为它是一个结构。

但是,当我通过赛格瑞数组传递到下一个视图控制器在我看来,它是通过引用传递,因为当我检查数组它们是相同的内存地址。

这是我如何检查

 的println(\\(unsafeAddressOf(运行)))// 0x0000000174240c00

我还以为这些内存地址会有所不同?还是我只是混淆自己。

运行/ StaffTask类无论是从NSObject的继承降耗的目的。

 类运行:NSObject的,NSCoding {}

此外,如果我在数组中访问一个项目

  VAR的服务= self.staffTasks [indexPath.row]

和编辑该值,无论该服务变量的值和阵列中的元素被更新。他们有相同的内存地址,如图

 的println(\\(unsafeAddressOf(服务))\\(unsafeAddressOf(self.staffTasks [indexPath.row])))

另外...

staffTasks是一个较大的阵列称为运行的一个子集

当我搜索服务对象,具有较大的盘,我发现他们也是相同的内存地址

 如果让指数=查找(self.runs,self.staff){
    的println(本地\\(unsafeAddressOf(self.staff))主目录\\(unsafeAddressOf(self.runs [指数])))
}

我使用NSCoding救我的对象,所以我想我需要找到服务对象大集内,更换对象,然后保存出来。

但原来我不需要,我能够编辑服务变量,运行的阵列自动更新......像一个引用类型会。

传递? ..设定瓦尔

在prepare为SEGUE,只是用标准的方式设置在第二VC的局部变量,VAR runsInSecondVC =运行。不使用,和放大器;指针或任何其他古怪

感谢您的帮助。

类基本详情

 类运行:NSObject的,NSCoding {    VAR runDate:NSDate的!
    VAR staffName:串!
    VAR staffEmail:串!
    VAR runTasks:[StaffTask]!}类StaffTask:NSObject的,NSCoding {    VAR TASKNAME:字符串
    VAR taskTime:NSInteger的
    VAR CLIENTNAME:串!
}

这是这些类的基础。没有什么复杂的。


解决方案

No. Swift arrays are a value type. This does not mean they are pass-by-value. It means that you can mutate an array by way of a reference without affecting other references to which that array has been assigned.

这篇关于斯威夫特数组传值...相同的内存地址?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-08 07:24