日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

9.类和结构体

發(fā)布時(shí)間:2025/3/21 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.类和结构体 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  類和結(jié)構(gòu)體是構(gòu)建代碼所用的一種通用且靈活的構(gòu)造體。我們可以使用完全相同的語(yǔ)法規(guī)則來(lái)為類和結(jié)構(gòu)體定義屬性(常量、變量)和添加方法,從而擴(kuò)展類和結(jié)構(gòu)體的功能。

  與其他編程語(yǔ)言所不同的是,Swift 并不要求你為自定義類和結(jié)構(gòu)去創(chuàng)建獨(dú)立的接口和實(shí)現(xiàn)文件。你所要做的是在一個(gè)單一文件中定義一個(gè)類或者結(jié)構(gòu)體,系統(tǒng)將會(huì)自動(dòng)生成面向其它代碼的外部接口。

1.類和結(jié)構(gòu)體對(duì)比

  【相同點(diǎn)】:

  • 定義屬性用于存儲(chǔ)值
  • 定義方法用于提供功能
  • 定義附屬腳本用于訪問(wèn)值
  • 定義構(gòu)造器用于生成初始化值
  • 通過(guò)擴(kuò)展以增加默認(rèn)實(shí)現(xiàn)的功能
  • 實(shí)現(xiàn)協(xié)議以提供某種標(biāo)準(zhǔn)功能
  •   【不同點(diǎn)】: 與結(jié)構(gòu)體相比,類還有如下的附加功能:

  • 繼承允許一個(gè)類繼承另一個(gè)類的特征
  • 類型轉(zhuǎn)換允許在運(yùn)行時(shí)檢查和解釋一個(gè)類實(shí)例的類型
  • 析構(gòu)器允許一個(gè)類實(shí)例釋放任何其所被分配的資源
  • 引用計(jì)數(shù)允許對(duì)一個(gè)類的多次引用
  •   【定義語(yǔ)法】:

    class SomeClass {// class definition goes here }
    struct SomeStructure {// structure definition goes here}

      【定義示例】:

    //結(jié)構(gòu)體 struct Resolution {var width = 0;var height = 0; }// class VideoMode {var resolution = Resolution();var interlaced = false;var frameRate = 0.0;var name: String?; }// TODO: 實(shí)例化 let someResolution = Resolution(); let someVideoMode = VideoMode();// TODO: 屬性操作 var width = someResolution.width; //someVideoMode.resolution.width = 100; var width2 = someVideoMode.resolution.width;// TODO: 結(jié)構(gòu)體類型的成員逐一構(gòu)造器 var otherResolution = Resolution(width: 30, height: 20); //【說(shuō)明】:所有結(jié)構(gòu)體都有一個(gè)自動(dòng)生成的成員逐一構(gòu)造器,用于初始化新結(jié)構(gòu)體實(shí)例中成員的屬性。新實(shí)例中各個(gè)屬性的初始值可以通過(guò)屬性的名稱傳遞到成員逐一構(gòu)造器之中。類實(shí)例沒(méi)有默認(rèn)的成員逐一構(gòu)造器。

    2.結(jié)構(gòu)體和枚舉是值類型

    • Swift 中,所有的基本類型:整數(shù)(Integer)、浮點(diǎn)數(shù)(floating-point)、布爾值(Boolean)、字符串(string)、數(shù)組(array)和字典(dictionary),都是值類型,并且在底層都是以結(jié)構(gòu)體的形式所實(shí)現(xiàn)。在 Swift 中,所有的結(jié)構(gòu)體和枚舉類型都是值類型。這意味著它們的實(shí)例,以及實(shí)例中所包含的任何值類型屬性,在代碼中傳遞的時(shí)候都會(huì)被復(fù)制。
    //結(jié)構(gòu)體 struct Resolution {var width = 0;var height = 0; }let hd = Resolution(width: 1920, height: 1080); var cinema = hd; cinema.width = 2000; print("cinema is now \(cinema.width) pixels wide"); //"cinema is now 2000 pixels wide\n" print("hd is still \(hd.width) pixels wide"); //"hd is still 1920 pixels wide\n"

    3.類是引用類型

    • 與值類型不同,引用類型在被賦予到一個(gè)變量、常量或者被傳遞到一個(gè)函數(shù)時(shí),其值不會(huì)被拷貝。因此,引用的是已存在的實(shí)例本身而不是其拷貝。
    struct Resolution{var width = 0;var height = 0;}class VideoMode{var resolution = Resolution();var interlaced = false;var frameRate = 0.0;var name: String?;}let tenEighty = VideoMode();tenEighty.resolution = Resolution(width: 1920, height: 1080);tenEighty.interlaced = true;tenEighty.name = "1080i";tenEighty.frameRate = 25.0;let alsoTenEighty = tenEighty;alsoTenEighty.frameRate = 30.0;print("The frameRate property of tenEighty is now \(tenEighty.frameRate)"); //"The frameRate property of tenEighty is now 30.0\n"// TODO: 恒等運(yùn)算符(等價(jià)于(===)和不等價(jià)于(!==)):檢測(cè)兩個(gè)常量或者變量是否引用同一個(gè)實(shí)例if (tenEighty === alsoTenEighty){print("tenEighty and alsoTenEighty refer to the same Resolution instance.");}//【說(shuō)明】:自定義的類和結(jié)構(gòu)體沒(méi)有對(duì)等價(jià)運(yùn)算符進(jìn)行默認(rèn)實(shí)現(xiàn),等價(jià)運(yùn)算符通常被稱為“相等”運(yùn)算符(==)與“不等”運(yùn)算符(!=)。對(duì)于自定義類型,Swift 無(wú)法判斷其是否“相等”,因?yàn)椤跋嗟取钡暮x取決于這些自定義類型在代碼中所扮演的角色。

    4.類和結(jié)構(gòu)體的選擇

      【考慮構(gòu)建結(jié)構(gòu)體】:

  • 該數(shù)據(jù)結(jié)構(gòu)的主要目的是用來(lái)封裝少量相關(guān)簡(jiǎn)單數(shù)據(jù)值。
  • 有理由預(yù)計(jì)該數(shù)據(jù)結(jié)構(gòu)的實(shí)例在被賦值或傳遞時(shí),封裝的數(shù)據(jù)將會(huì)被拷貝而不是被引用。
  • 該數(shù)據(jù)結(jié)構(gòu)中儲(chǔ)存的值類型屬性,也應(yīng)該被拷貝,而不是被引用。
  • 該數(shù)據(jù)結(jié)構(gòu)不需要去繼承另一個(gè)既有類型的屬性或者行為。
  • ?5.字符串(String)、數(shù)組(Array)、和字典(Dictionary)類型的賦值與復(fù)制行為

    • Swift 中,許多基本類型,諸如StringArrayDictionary類型均以結(jié)構(gòu)體的形式實(shí)現(xiàn)。這意味著被賦值給新的常量或變量,或者被傳入函數(shù)或方法中時(shí),它們的值會(huì)被拷貝。
    • Objective-C NSStringNSArrayNSDictionary類型均以類的形式實(shí)現(xiàn),而并非結(jié)構(gòu)體。它們?cè)诒毁x值或者被傳入函數(shù)或方法時(shí),不會(huì)發(fā)生值拷貝,而是傳遞現(xiàn)有實(shí)例的引用。

    轉(zhuǎn)載于:https://www.cnblogs.com/LeeGof/p/5675007.html

    總結(jié)

    以上是生活随笔為你收集整理的9.类和结构体的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。