Swift 3必看:foundation中數(shù)據(jù)引用類型改為值類型

注重安全的swift中變量聲明時要表明是否可變茄蚯,不變用<code>let</code>,可變用<code>var</code>。然而由于swift設(shè)計之初就要考慮兼容OC的這個歷史包袱,很多類型都沿用了OC的類型梁肿。只有幾個基礎(chǔ)類型重寫聲明成了值類型(struct)蛤迎,比如:<code>String</code>,<code>Array</code>确虱。

引用類型的<code>let</code>和值類型的<code>let</code>在邏輯上有著根本的不同。值類型的不可變就如字面意義替裆,數(shù)據(jù)不能被更改校辩;而引用類型的不可變只要保證指向的實例不變就可以了,實例本身的屬性是可以改變的辆童。

一些原有的OC的foundation表示數(shù)據(jù)的引用類型在swift的行為就和期待的不同了宜咒,比如:

let date = NSDate()
date.addingTimeInterval(1000)

這樣的寫法是可以編譯通過的。然而確和我們期望的結(jié)果不同把鉴。我們聲明了一個不可變的日期故黑,然而在<code> addingTimeInterval </code>后日期已經(jīng)被改變了。

所以在3.0中把原有的很多表示數(shù)據(jù)的引用類型在增加了對應(yīng)的值類型庭砍。
更改的如下:

Value Type Class Type
AffineTransform NSAffineTransform
CharacterSet NSCharacterSet, NSMutableCharacterSet
Date NSDate
DateComponents NSDateComponents
Data NSData, NSMutableData
IndexSet NSIndexSet, NSMutableIndexSet
IndexPath NSIndexPath
Notification NSNotification
PersonNameComponents NSPersonNameComponents
URL NSURL
URLComponents NSURLComponents
URLQueryItem NSURLQueryItem
UUID NSUUID

在swift中相關(guān)的api返回類型也做了對應(yīng)的更改场晶。比如常見的<code> cellForRow </code>方法:

func cellForRow(at indexPath: IndexPath) -> UITableViewCell?

原來的參數(shù)類型是NSIndexPath,現(xiàn)在則改為了IndexPath怠缸。

和原來的OC的類型映射和原來的邏輯一樣诗轻,類型轉(zhuǎn)換直接使用<code> as </code>

let ocString = NSString(string: "xxx")
let swiftString: String = ocString as String

let swiftIndex = IndexPath(row: 1, section: 1)
let ocIndex = swiftIndex as NSIndexPath

需要強調(diào)的是,兩者之間的轉(zhuǎn)換是有成本的凯旭。swift中并沒有真正完全的實現(xiàn)一套數(shù)據(jù)存儲邏輯概耻。只是內(nèi)部保存了對oc對象的引用使套,使得swift api訪問時行為邏輯和值類型一致,包括copy on write鞠柄。

如下圖所示侦高,當(dāng)執(zhí)行<code> var otherData = data </code>后,其實指向的是同一個引用類型的實例厌杜。

歡迎關(guān)注我的微博:@沒故事的卓同學(xué)

相關(guān)鏈接:
SE0069-Mutability and Foundation Value Types

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奉呛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子夯尽,更是在濱河造成了極大的恐慌瞧壮,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匙握,死亡現(xiàn)場離奇詭異咆槽,居然都是意外死亡,警方通過查閱死者的電腦和手機圈纺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門秦忿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛾娶,你說我怎么就攤上這事灯谣。” “怎么了蛔琅?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵胎许,是天一觀的道長。 經(jīng)常有香客問我罗售,道長辜窑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任莽囤,我火速辦了婚禮谬擦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朽缎。我一直安慰自己惨远,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布话肖。 她就那樣靜靜地躺著北秽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪最筒。 梳的紋絲不亂的頭發(fā)上贺氓,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機與錄音床蜘,去河邊找鬼辙培。 笑死蔑水,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扬蕊。 我是一名探鬼主播搀别,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尾抑!你這毒婦竟也來了歇父?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤再愈,失蹤者是張志新(化名)和其女友劉穎榜苫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翎冲,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡垂睬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了府适。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羔飞。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖檐春,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情么伯,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布田柔,位于F島的核電站俐巴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏硬爆。R本人自食惡果不足惜欣舵,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缀磕。 院中可真熱鬧缘圈,春花似錦、人聲如沸袜蚕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牲剃。三九已至遣疯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凿傅,已是汗流浹背缠犀。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工数苫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辨液。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓文判,卻偏偏與公主長得像,于是被迫代替她去往敵國和親室梅。 傳聞我的和親對象是個殘疾皇子戏仓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,817評論 1 10
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件亡鼠、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,118評論 4 61
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出赏殃,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,231評論 3 25
  • 起初 我的心如鄉(xiāng)村般 生活在純樸、自然的平凡里 歡聲笑語 也許 那一年的成長 天花亂墜 那一年的青春 繁華落盡 之...
    趙江灝閱讀 578評論 0 1
  • 如果你不曾遠去 定會是我的歡喜 快樂隨你遠去 我?guī)е嗨甲窇?絲絲縷縷 絲絲縷縷 密集成雨 乘著回憶的小船 劃回...
    汩月閱讀 248評論 0 0