Swift學(xué)習(xí)(八:類(lèi)和結(jié)構(gòu)體)

1.首先進(jìn)行一下類(lèi)和結(jié)構(gòu)體的對(duì)比:
  • 共同點(diǎn):
    定義屬性用于存儲(chǔ)值
    定義方法用于提供功能
    定義構(gòu)造器用于生成初始化值
    通過(guò)擴(kuò)展增加默認(rèn)實(shí)現(xiàn)的功能
    實(shí)現(xiàn)協(xié)議提供某種標(biāo)準(zhǔn)功能

  • 類(lèi)還有更多功能:
    允許繼承
    引用計(jì)數(shù)允許對(duì)一個(gè)類(lèi)的多次引用

2.實(shí)例化類(lèi)和結(jié)構(gòu)體語(yǔ)法
    class Some{}
    struct SomeStuct{}
3.
  • 結(jié)構(gòu)體中屬性的訪問(wèn)通過(guò)點(diǎn)語(yǔ)法。

  • 結(jié)構(gòu)體都有一個(gè)自動(dòng)生成的成員主意構(gòu)造器。

  • 結(jié)構(gòu)體和枚舉是值類(lèi)型,創(chuàng)建多個(gè)結(jié)構(gòu)體對(duì)象事,是對(duì)值的復(fù)制,而不是指向相同實(shí)例

      struct SomeStru{
              var width= 0
              var height =0
      }
      let some = SomeStru()
      some.width = 10
    
      let one = some
      one.width = 20
      print("\(one.width).....\(some.width)")       //  20...10
    

在將some賦值給one時(shí),實(shí)際上是將some里的值拷貝給了one,將拷貝的值存入新的SomeStru實(shí)例中。someone相互獨(dú)立,不會(huì)影響互相的值。

  • 類(lèi)是引用類(lèi)型,在被賦值到一個(gè)變量或常量時(shí),值不會(huì)被拷貝,引用的是已經(jīng)存在的實(shí)例本身而不是值拷貝
4.恒等運(yùn)算符:判斷兩個(gè)常量或變量是否引用同一個(gè)實(shí)例
  • 等價(jià)于===表示兩個(gè)類(lèi)類(lèi)型(class type)的常量或者變量引用同一個(gè)類(lèi)實(shí)例
  • 不等價(jià)于 !==表示兩個(gè)實(shí)例的值“相等”或“相同”,判定時(shí)要遵照設(shè)計(jì)者定義的評(píng)判標(biāo)準(zhǔn),因此相對(duì)于“相等”來(lái)說(shuō),這是一種更加合適的叫法。
5.類(lèi)和結(jié)構(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ǔ)存的值類(lèi)型屬性,也應(yīng)該被拷貝,而不是被引用。
  • 該數(shù)據(jù)結(jié)構(gòu)不需要去繼承另一個(gè)既有類(lèi)型的屬性或者行為。
6.字符串(String)、數(shù)組(Array)、和字典(Dictionary)類(lèi)型的賦值與復(fù)制行為
  • Swift 中,許多基本類(lèi)型,諸如String,Array和Dictionary類(lèi)型均以結(jié)構(gòu)體的形式實(shí)現(xiàn)。這意味著被賦值給新的常量或變量,或者被傳入函數(shù)或方法中時(shí),它們的值會(huì)被拷貝。

  • Objective-C 中NSString,NSArray和NSDictionary類(lèi)型均以類(lèi)的形式實(shí)現(xiàn),而并非結(jié)構(gòu)體。它們?cè)诒毁x值或者被傳入函數(shù)或方法時(shí),不會(huì)發(fā)生值拷貝,而是傳遞現(xiàn)有實(shí)例的引用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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