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)注我
微博:順揚sky
簡書:順揚sky
掘金:順揚sky