日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

9.类和结构体

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

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

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

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

  【相同點】:

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

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

    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: 實例化 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); //【說明】:所有結(jié)構(gòu)體都有一個自動生成的成員逐一構(gòu)造器,用于初始化新結(jié)構(gòu)體實例中成員的屬性。新實例中各個屬性的初始值可以通過屬性的名稱傳遞到成員逐一構(gòu)造器之中。類實例沒有默認(rèn)的成員逐一構(gòu)造器。

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

    • Swift 中,所有的基本類型:整數(shù)(Integer)、浮點數(shù)(floating-point)、布爾值(Boolean)、字符串(string)、數(shù)組(array)和字典(dictionary),都是值類型,并且在底層都是以結(jié)構(gòu)體的形式所實現(xiàn)。在 Swift 中,所有的結(jié)構(gòu)體和枚舉類型都是值類型。這意味著它們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞的時候都會被復(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.類是引用類型

    • 與值類型不同,引用類型在被賦予到一個變量、常量或者被傳遞到一個函數(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: 恒等運算符(等價于(===)和不等價于(!==)):檢測兩個常量或者變量是否引用同一個實例if (tenEighty === alsoTenEighty){print("tenEighty and alsoTenEighty refer to the same Resolution instance.");}//【說明】:自定義的類和結(jié)構(gòu)體沒有對等價運算符進(jìn)行默認(rèn)實現(xiàn),等價運算符通常被稱為“相等”運算符(==)與“不等”運算符(!=)。對于自定義類型,Swift 無法判斷其是否“相等”,因為“相等”的含義取決于這些自定義類型在代碼中所扮演的角色。

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

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

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

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

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

    總結(jié)

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

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