private和fileprivate
自動(dòng)轉(zhuǎn)換代碼以后把我大部分(不知道是不是全部唠梨,沒統(tǒng)計(jì))private
都改成了fileprivate
。本來(lái)不用private
也不會(huì)對(duì)程序的編譯運(yùn)行有任何影響港准,private
只是為了保證代碼外部可讀性而準(zhǔn)備的限次,而現(xiàn)在有了fileprivate
以后氮昧,private變得更加“私有”⌒畛睿現(xiàn)在的private
方法和對(duì)象胯盯,只能在大括號(hào)中訪問缝彬,即便是這個(gè)類的extension
中届囚,也不能訪問private
讨勤。而fileprivate
的作用域蚌父,則和以前的private
一樣依啰,顧名思義油狂,在這個(gè)文件中都能訪問站超。
NSData和Data
Data
是swift的產(chǎn)物斤程,和Array角寸,Dictionary,Set等類似忿墅。NSData
的初始化是NSData(XXX)
扁藕,而Data用起來(lái)更方便,在需要獲取數(shù)據(jù)的對(duì)象后面加上.data疚脐,即可獲得數(shù)據(jù)亿柑,方便是方便,老代碼的修改就比較麻煩了棍弄。
NSURLSession和URLSession
URLRequest
終于把煩人的Mutable去掉了望薄,那些強(qiáng)迫癥不用再因?yàn)?code>let xxx = NSMutableXXX是可變的而糾結(jié)了。
Any和AnyObject
現(xiàn)在Any貌似可以和AnyObject互相轉(zhuǎn)換了呼畸,以前Any對(duì)應(yīng)struct而AnyObject對(duì)應(yīng)class痕支,一些不太復(fù)雜的模型用struct編寫,和某些方法(參數(shù)需要傳AnyObject或者class類型的數(shù)據(jù))兼容性不好蛮原,不得不改為用class編寫卧须,這就不符合struct設(shè)計(jì)的初衷了。
閉包的escaping和non-escaping類型
這個(gè)類型決定了閉包是否在調(diào)用他的函數(shù)(或其他)返回時(shí)就銷毀(儒陨?)花嘶,escaping
是不銷毀的意思,non-escaping
是保留的意思框全。一般在網(wǎng)絡(luò)方法中察绷,閉包一般在其他線程中執(zhí)行干签,并且在函數(shù)返回時(shí)還沒有執(zhí)行完畢津辩,這里種情況應(yīng)該使用escaping
類型。使用方法是在閉包前面加@escaping
。反之同理喘沿。
那么為什么在swift2之前都不需要加呢闸度,因?yàn)閟wift2之前默認(rèn)都是escaping
類型,而swift3以后默認(rèn)是non-escaping
蚜印。在合理的情況下莺禁,使用non-escaping
類型的閉包更節(jié)省內(nèi)存,而且窄赋,在閉包內(nèi)可以不用再加self關(guān)鍵字了哟冬。
參考文章
awakeFromNib方法中獲取frame
原來(lái)在xib文件中設(shè)置約束定寬高約束,在awakeFromNib方法中是可以直接獲取到view.frame.size的值的忆绰,現(xiàn)在可能因?yàn)閤ib文件中加入了多設(shè)備的尺寸設(shè)置浩峡,已經(jīng)不能再獲取size了。原來(lái)frame還跟xib的實(shí)際大小有關(guān)错敢,現(xiàn)在xib所有的布局都是相對(duì)的了翰灾,不能再過分依賴frame。順帶說(shuō)一下稚茅,現(xiàn)在如果直接獲取size纸淮,得到的是(1000.0, 1000.0)。
plist中的privacy key
在iOS舊版本中都會(huì)亚享,凡是涉及到隱私相關(guān)權(quán)限(例如錄音咽块、攝像之類的)的訪問,都會(huì)提示是否允許訪問虹蒋。在plist有一系列privacy - XXXDescription的key作為權(quán)限詢問提示的文字糜芳,舊版iOS中這些是選填的,iOS10里面如果沒有填寫又訪問了相關(guān)權(quán)限魄衅,程序會(huì)崩潰峭竣。
形如"\(XXX)"在字符串中引用其他對(duì)象
在之前的版本中,只有當(dāng)XXX的類型是optional?晃虫,打印結(jié)果才會(huì)帶有"optional"皆撩,例如:
var XXX: Int? = 1
print("XXX的結(jié)果為:\(XXX)) //XXX的結(jié)果為:optional(1)
但如果XXX類型為optional!,就不會(huì)打印"optional"哲银。
在新版本中扛吞,無(wú)論類型為!還是?,打印結(jié)果都會(huì)帶有optional荆责,可以在打印時(shí)加上!滥比,或者聲明時(shí)不要聲明為optional解決。例如:
//錯(cuò)誤示范:
var XXX: Int! = 1
print("XXX的結(jié)果為:\(XXX)) //XXX的結(jié)果為:optional(1)
//正確示范:
var XXX: Int! = 1
print("XXX的結(jié)果為:\(XXX!)) //XXX的結(jié)果為:1
//或者
var XXX: Int = 1
print("XXX的結(jié)果為:\(XXX)) //XXX的結(jié)果為:1