场景:一个数组(bigArray)里包含几个小数组(smallArray),小数组里的数据分别是tableView要展示的不同数据。
那么问题来了,在OC里,用过NSMutableArray *smalllArray = bigArray[0],取出的smallArray,此时对smallArray进行元素处理(删除,添加),bigArray[0]一样改变。
在Swift则不然,smallArray进行操作,bigArray[0]不会改变。
遇到类似的问题,最好的方法就是把数组的内存地址:打印之。
OC很简单,打印的结果也如我所料,smallArray跟bigArray[0]是一样的内存地址
Swift怎么打印数组的内存地址还没找到 =。= ,打印数组元素的内存方法是
func printAddress(o:T) {
debugLog(String.init(format: "%018p", unsafeBitCast(o, to: Int.self)))
}
但是这并没有什么卵用 =。=,写在这里只是提醒自己别忘了这个方法,Swift这些API太蛋疼。
最后想到的可能性只有OC和Swift数组的区别了。
果不其然,OC的NSMutableArray
@interface NSObject{
Class isa OBJC_ISA_AVAILABILITY;
}
最根本是Class
Swift的Array
public struct Array: RandomAccessCollection, MutableCollection
起本质是一个结构体。
其实不仅仅是数组,Swift里很多常用的API都是Struct类型,这就导致了上述场景我在OC里运用的很溜的一个方法,到Swift里各种碰壁。
因为本身也是小菜鸟一枚,所以对于结构体和类的内存地址问题不做深讨,有错误和不足之处忘大神们指教!😆