場景:一個數(shù)組(bigArray)里包含幾個小數(shù)組(smallArray),小數(shù)組里的數(shù)據(jù)分別是tableView要展示的不同數(shù)據(jù)。
那么問題來了,在OC里,用過NSMutableArray *smalllArray = bigArray[0],取出的smallArray,此時對smallArray進行元素處理(刪除,添加),bigArray[0]一樣改變。
在Swift則不然,smallArray進行操作,bigArray[0]不會改變。
遇到類似的問題,最好的方法就是把數(shù)組的內存地址:打印之。
OC很簡單,打印的結果也如我所料,smallArray跟bigArray[0]是一樣的內存地址
Swift怎么打印數(shù)組的內存地址還沒找到 =。= ,打印數(shù)組元素的內存方法是
func printAddress(o:T) ?{
debugLog(String.init(format: "%018p", unsafeBitCast(o, to: Int.self)))
}
但是這并沒有什么卵用 =。=,寫在這里只是提醒自己別忘了這個方法,Swift這些API太蛋疼。
最后想到的可能性只有OC和Swift數(shù)組的區(qū)別了。
果不其然,OC的NSMutableArray?
@interface NSObject{
Class isa? OBJC_ISA_AVAILABILITY;
}?
最根本是Class
Swift的Array?
public struct Array: RandomAccessCollection, MutableCollection
起本質是一個結構體。
其實不僅僅是數(shù)組,Swift里很多常用的API都是Struct類型,這就導致了上述場景我在OC里運用的很溜的一個方法,到Swift里各種碰壁。
因為本身也是小菜鳥一枚,所以對于結構體和類的內存地址問題不做深討,有錯誤和不足之處忘大神們指教!??