swift語法相關(guān)-2


swifit聲明類

class person {
...
...
}


面向?qū)ο笕筇匦?/h3>
53-01.png
53-02.png
53-03.png

Swift中的循環(huán)引用

  • 靜態(tài)圖片
53-04.png
  • 動(dòng)態(tài)圖片
53-01.gif
  • 代碼如下
import Foundation

// 1.定義兩個(gè)類
class Person {
    // 通常情況下對(duì)象類型會(huì)聲明稱可選類型
    // 等號(hào)右邊為nil類型,那么等號(hào)左邊就不能為Book類型,必須為可選類型Book?,這樣才有機(jī)會(huì)讓book為nil類型啊
    // 因?yàn)榈忍?hào)左右兩側(cè)類型一致才可以賦值,如果直接為Book類型,則會(huì)報(bào)類型不一致不能賦值的錯(cuò)誤
    var b : Book? = nil //等價(jià) var book : Book?
    deinit {
        print("Person -- deinit")      //  print(__FUNCTION__)
    }
}
class Book {
    /************解決循環(huán)引用的做法(做法1,做法2)************/
     
     /*   weak和unowned相同點(diǎn):創(chuàng)建對(duì)象時(shí),對(duì)象的引用計(jì)數(shù)器都不會(huì)加1
     weak修飾的對(duì)象類型,對(duì)象被銷毀時(shí)(用weak修飾,對(duì)象創(chuàng)建出來立刻被銷毀),該對(duì)象的引用計(jì)數(shù)器自動(dòng)指向nil
     weak和unowned不同點(diǎn):<
     unowned修飾的對(duì)象類型,對(duì)象被銷毀時(shí)(必須通過設(shè)置對(duì)象為nil來銷毀),該對(duì)象的引用計(jì)數(shù)器依然指向最初的內(nèi)存地址。所以容易造成壞的內(nèi)存訪問(野指針),訪問僵死對(duì)象 */
     // 做法1:weak
     //weak var owner : Person? = Person()  或者 weak var owner : Person?
     
     // 做法2:unowned
     // unowned修飾的對(duì)象,引用計(jì)數(shù)器不會(huì)加1哦
     // 雖然owner是Book類中的一個(gè)屬性,但是owner : Person = Person(),owner就是一個(gè)對(duì)象了,
     // 所以owner既是Book中的屬性,也是Person類中的對(duì)象
     unowned var owner : Person = Person() // 有unowned修飾,owner此時(shí)相當(dāng)于弱指針,執(zhí)行完這行立馬被銷毀
    deinit {
        print("Book -- deinit")
    }
}
// 2.創(chuàng)建類對(duì)應(yīng)的對(duì)象
var p : Person? = Person()// p指針強(qiáng)引用著Person()的地址,也就是強(qiáng)引用著Person類對(duì)象
var b : Book? = Book() // p指針強(qiáng)引用著Book()的地址,也就是強(qiáng)引用這Book類對(duì)象
// 3.設(shè)置對(duì)象之間的關(guān)系
p?.b = b // Person類中的b指向b對(duì)象,也就是Book類對(duì)象
b?.owner = p!// Book類中的owner指向b對(duì)象,也就是Person類對(duì)象

// 3中的兩行代碼造成了循環(huán)引用,即你強(qiáng)引用著我,我強(qiáng)引用著你,兩個(gè)對(duì)象最終都不會(huì)被釋放,即不會(huì)打印deinit的內(nèi)容。解決辦法(辦法1,辦法2)
// 辦法1:讓Person類中的b或者Book中的owner,其中一個(gè)變成弱引用,即用weak修飾
// 辦法2:讓Person類中的b或者Book中的owner,其中一個(gè)用unowned修飾
 p = nil // 釋放p強(qiáng)引用著的Person類對(duì)象.注釋的話,不打印Person -- deinit
 b = nil // 釋放b強(qiáng)引用著的Book類對(duì)象。注釋掉的話,不打印Book -- deinit

// var owner : Person = Person(),沒有unowned修飾時(shí),owner的指針強(qiáng)引用著Person的類對(duì)象,所以不會(huì)被釋放.執(zhí)行到第38行時(shí),owner的指針由之前指向的Person,轉(zhuǎn)而指向了另一個(gè)類(38行)中的Person.所以此時(shí)會(huì)打印之前的Person類對(duì)象被銷毀,。執(zhí)行到p = nil,b = nil時(shí),指針p被銷毀,指針b被銷毀,但是由于Person類對(duì)象和Book類對(duì)象存在循環(huán)引用,你強(qiáng)引用著我,我強(qiáng)引用著你,導(dǎo)致最后誰也沒執(zhí)行deinit,所以只會(huì)打印一次deinit
// 當(dāng) unowned var owner : Person = Person(),有unowned修飾時(shí),執(zhí)行到第28行,owner就會(huì)被銷毀,因?yàn)橛胾nowned修飾對(duì)象owner,引用計(jì)數(shù)器不會(huì)加1,所以為0,為0的話,對(duì)象一被創(chuàng)建出來就立馬被銷毀



可選鏈

53-05.png

可選鏈的使用

53-06.png

協(xié)議的使用

53-07.png

協(xié)議在代理中的使用

53-08.png

OC的block + Swift的閉包

  • 閉包的類型: (參數(shù)列表) -> (返回值的類型)
53-09.png

尾隨閉包

  • 閉包的類型: (參數(shù)列表) -> (返回值的類型)
53-10.png

解決閉包的循環(huán)引用

53-11.png

懶加載的使用

53-12.png

常見注釋

53-13.png

 1.單行注釋 //
 2.多行注釋 /* */
    swift支持多行注釋之間的嵌套使用
 3.文檔注釋 ///
 4.分組注釋
    // MARK:- 系統(tǒng)回調(diào)函數(shù)
    // MARK: viewDidLoad方法

訪問權(quán)限

 private : 修飾當(dāng)前的源文件(就是當(dāng)前類), 在當(dāng)前源文件中可以訪問,在其他文件中不可訪問。就是oc中的private
 internal : 修飾整個(gè)項(xiàng)目. 在整個(gè)項(xiàng)目中都可以進(jìn)行訪問,并且默認(rèn)情況下修飾就是internal。就是在oc中整個(gè)項(xiàng)目中的所有類中,都可以進(jìn)行訪問
 public : 是可以跨框架訪問


異常處理


Swift項(xiàng)目中使用OC的代碼

  • 創(chuàng)建oc文件時(shí)候,選擇創(chuàng)建橋接文件,那么系統(tǒng)內(nèi)部就會(huì)自動(dòng)配置橋接文件。聚義步驟如下

53-14.png
53-15.png

  • 創(chuàng)建oc文件時(shí)候,選擇不創(chuàng)建橋接文件,那么我們必須手動(dòng)配置橋接文件。具體步驟如下:

53-16.png
  • 創(chuàng)建橋接文件
53-17.png
53-18.png
53-19.png
  • 導(dǎo)入要使用的類
53-20.png
53-21.png
  • 將橋接文件的路徑放到上圖的4宏
53-22.png
53-24.png
53-25.png

對(duì)以上的特別注意:

  • 手動(dòng)創(chuàng)建橋接文件Header.h的時(shí)候,這個(gè)文件要放在黃色的ZB里面創(chuàng)建出來,如果在如下的地方創(chuàng)建了Header.h,你會(huì)發(fā)現(xiàn)Swift項(xiàng)目中無法使用OC的代碼,即使你其余的步驟操作都正確了
53-23.png

OC項(xiàng)目中使用Swift的代碼

  • 在oc項(xiàng)目中Command+N一個(gè)Swift文件
53-26.png
53-27.png
  • 一定都要用public修飾
53-28.png
  • 導(dǎo)入頭文件格式固定
53-29.png

對(duì)以上的特別注意:

53-30.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,444評(píng)論 3 25
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,586評(píng)論 4 61
  • 38. 崇尚財(cái)富的時(shí)代難有愛情-友誼(豐睿)單行本《游戲玩家》
    睿者先行閱讀 231評(píng)論 0 0
  • 如果自己只有最重要的一件事可做,那這件事就是,成長! 從現(xiàn)在一直到我一百歲,每一天把一半時(shí)間花在自己身上,用來成長...
    Matrix101閱讀 314評(píng)論 0 0
  • 最開心的時(shí)刻到了,開始記下今天的感悟,梳理自己的一些情緒。今天的我有一份特別的感受,特別想學(xué)習(xí)看書做題,比如練文章...
    安安木棉閱讀 180評(píng)論 0 0

友情鏈接更多精彩內(nèi)容