Swift基礎--類和結構體

類和機構提是人們構建代碼全部的一種通用且靈活的結構體.爲了在類和結構體中實現各類功能,咱們必須嚴格按照常量,變量及函數鎖規定的語法規則來定義屬性和添加方法.與其餘編程語言不一樣的是swift並非要求咱們爲自定義的類和結構體去創造獨立的接口和實現文件.咱們所須要作的只是在一個單一文件中定義一個類或結構體,系統將會自動生成面向其餘代碼的外部接口.編程

一,類和結構體的對比

1.1 類和結構體共同點

  • 定義屬性: 用於存儲值.
  • 定義方法: 用於提供功能.
  • 定義下標: 用於訪問值.
  • 定義構造函數: 用於初始化相關屬性狀態
  • 經過擴展: 增長默認實現的功能
  • 經過協議: 提供某種功能標準

1.2 類單獨具備的功能

  • 繼承: 是一個類能繼承另外一個類的特性.
  • 類型檢驗: 能夠在實例運行時檢查類型和對其進行解析.
  • 析構: 能夠釋放實例所佔用的資源
  • 引用計數器: 使類能夠被屢次引用.

二,類和結構體的定義

類和結構體有類似的定義方式.咱們能夠經過關鍵字"class","struct"來分別表示雷和結構體,並在一對花括號中定義他們的具體內容,入:swift

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()
}
複製代碼

三,類和結構體的實例

結構體和類都是使用構造惡氣語法來生成新的實例.構造器語法的最簡單心事是在結構體或類的類型名稱後根鎖一個空的圓括號,經過這種方式所建立的類或結構體實例,其屬性均會被初始化爲默認值. 入:數組

let weapon = Weapon()
let player = Player()
複製代碼

3.1 類和結構體的屬性訪問

經過使用點號".",咱們能夠訪問實例中所含有的屬性.其語法規則是,實例名後面緊跟屬性名,二者經過點號"."鏈接,入:bash

weapon.name
weapon.hitRate
weapon.attack

player.name
player.hp
player.profession
player.sabre
複製代碼

四,結構體是值類型

值類型: 被賦給一個變量,常量或自己被傳遞給一個函數式,實際上操做的是它的副本(簡單來講,值類型傳遞的是值複本). 實際上,在swift中,全部的基本類型 ---整數,浮點數,布爾值,字符串,數組,集,字典和枚舉,都是值類型,並都是以結構體的形式來實現的.編程語言

在swift中,全部的結構體都是值類型,這意味着他們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞時都會被複制.函數

五,類是引用類型

引用類型: 在被賦於一個變量,常量或被傳遞到一個函數式,操做的是引用,其並非複製.所以,引用的是已存在的實例自己而不是其副本.網站

六,如何選擇類和結構體

類和結構體有不少類似的地方,整體來講,一下這些狀況,能夠考慮使用結構體:ui

  • 封裝一下簡單的數據值
  • 但願在賦值或傳遞時,使用值副本而不是值傳遞.
  • 但願實例使用值類型,而非引用類型
  • 不但願繼承咱們建立的結構體(結構體不能被繼承) 可是通常狀況下,咱們仍是使用類的狀況比較多

七,集合類型的賦值和複製

swift中字符串,數組,集合字典類型均以結構體的形式實現,這意味着string,set,array,dictionary類型數據被賦值給新的常量(或變量),或者當被傳入函數(或方法)中時,他們的值會發生複製行爲(值傳遞方式)spa

hi 各位大佬,若是您喜歡個人文章,能夠在如下平臺關注我

我的網站.net

微博:順揚sky

簡書:順揚sky

掘金:順揚sky

CSDN博客

相關文章
相關標籤/搜索