Swift基礎(chǔ)--類和結(jié)構(gòu)體

Swift基礎(chǔ)--類和結(jié)構(gòu)體

類和機構(gòu)提是人們構(gòu)建代碼所有的一種通用且靈活的結(jié)構(gòu)體.為了在類和結(jié)構(gòu)體中實現(xiàn)各種功能,我們必須嚴格按照常量,變量及函數(shù)鎖規(guī)定的語法規(guī)則來定義屬性和添加方法.與其他編程語言不同的是swift并不是要求我們?yōu)樽远x的類和結(jié)構(gòu)體去創(chuàng)造獨立的接口和實現(xiàn)文件.我們所需要做的只是在一個單一文件中定義一個類或結(jié)構(gòu)體,系統(tǒng)將會自動生成面向其他代碼的外部接口.

一,類和結(jié)構(gòu)體的對比

1.1 類和結(jié)構(gòu)體共同點

  • 定義屬性: 用于存儲值.
  • 定義方法: 用于提供功能.
  • 定義下標: 用于訪問值.
  • 定義構(gòu)造函數(shù): 用于初始化相關(guān)屬性狀態(tài)
  • 通過擴展: 增加默認實現(xiàn)的功能
  • 通過協(xié)議: 提供某種功能標準

1.2 類單獨具有的功能

  • 繼承: 是一個類能繼承另一個類的特性.
  • 類型檢驗: 可以在實例運行時檢查類型和對其進行解析.
  • 析構(gòu): 可以釋放實例所占用的資源
  • 引用計數(shù)器: 使類可以被多次引用.

二,類和結(jié)構(gòu)體的定義

類和結(jié)構(gòu)體有相似的定義方式.我們可以通過關(guān)鍵字"class","struct"來分別表示雷和結(jié)構(gòu)體,并在一對花括號中定義他們的具體內(nèi)容,入:

struct Weapon {
    var name: String = ""
    var hitRate: CGFloat = 0.0
    var attack: Int = 0
}

class Player {
    var name: String = ""
    var hp: Int = 0
    var profession: String = ""
    var sabre = Weapon()
}

三,類和結(jié)構(gòu)體的實例

結(jié)構(gòu)體和類都是使用構(gòu)造惡氣語法來生成新的實例.構(gòu)造器語法的最簡單心事是在結(jié)構(gòu)體或類的類型名稱后根鎖一個空的圓括號,通過這種方式所創(chuàng)建的類或結(jié)構(gòu)體實例,其屬性均會被初始化為默認值. 入:

let weapon = Weapon()
let player = Player()

3.1 類和結(jié)構(gòu)體的屬性訪問

通過使用點號".",我們可以訪問實例中所含有的屬性.其語法規(guī)則是,實例名后面緊跟屬性名,兩者通過點號"."連接,入:

weapon.name
weapon.hitRate
weapon.attack

player.name
player.hp
player.profession
player.sabre

四,結(jié)構(gòu)體是值類型

值類型: 被賦給一個變量,常量或本身被傳遞給一個函數(shù)式,實際上操作的是它的副本(簡單來說,值類型傳遞的是值復(fù)本). 實際上,在swift中,所有的基本類型 ---整數(shù),浮點數(shù),布爾值,字符串,數(shù)組,集,字典和枚舉,都是值類型,并都是以結(jié)構(gòu)體的形式來實現(xiàn)的.

在swift中,所有的結(jié)構(gòu)體都是值類型,這意味著他們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞時都會被復(fù)制.

五,類是引用類型

引用類型: 在被賦于一個變量,常量或被傳遞到一個函數(shù)式,操作的是引用,其并不是復(fù)制.因此,引用的是已存在的實例本身而不是其副本.

六,如何選擇類和結(jié)構(gòu)體

類和結(jié)構(gòu)體有很多相似的地方,總體來說,一下這些情況,可以考慮使用結(jié)構(gòu)體:

  • 封裝一下簡單的數(shù)據(jù)值
  • 希望在賦值或傳遞時,使用值副本而不是值傳遞.
  • 希望實例使用值類型,而非引用類型
  • 不希望繼承我們創(chuàng)建的結(jié)構(gòu)體(結(jié)構(gòu)體不能被繼承)
    但是一般情況下,我們還是使用類的情況比較多

七,集合類型的賦值和復(fù)制

swift中字符串,數(shù)組,集合字典類型均以結(jié)構(gòu)體的形式實現(xiàn),這意味著string,set,array,dictionary類型數(shù)據(jù)被賦值給新的常量(或變量),或者當(dāng)被傳入函數(shù)(或方法)中時,他們的值會發(fā)生復(fù)制行為(值傳遞方式)

hi 各位大佬,如果您喜歡我的文章,可以在以下平臺關(guān)注我

個人網(wǎng)站

微博:順揚sky

簡書:順揚sky

掘金:順揚sky

CSDN博客

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

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

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