天天看點

iOS開發(Swift)總結20 - 枚舉, 結構體和類

第2部分 故事的進階要素 - 程式設計語言Swift的進階部分

8 枚舉, 結構體和類

8.1 概念通俗講解

1). 枚舉,簡單了解:一一列舉的意思。也就是說把互斥的類型一個一個列舉出來。

例如性别,列舉出來其中的類型:男和女。

2). 類是對現實中一類具有共同特征事物的抽象。例如我們可以把人當做一個類。

與類相對應的就是執行個體。執行個體就是類具體的實際例子。例如人是類,人中的一個具體人,比如小王,就是執行個體。

類的本質是一種資料類型,一種比Int等基本資料更複雜的資料類型。

3). Swift中,從概念的角度講,結構體和類很像。

結構體也是對現實中一類具有共同特征事物的抽象。舉例:我們也可以把人當做一個結構體。

與結構體相對應的也是執行個體。例如人是結構體,人中的一個具體人,比如小王,就是執行個體。

從概念上看,結構體和類是很相似的,不過實際使用中,還是有很多不同的。下面是結構體與類的比較

結構體和類的共同點

(1)有屬性
 (2)有方法
 (3)可定義下标
 (4)可定義構造器
 (5)可通過擴充增加功能
 (6)可遵循協定提供功能
           

結構體和類的不同點

類具有一些結構體沒有的功能:

(1)繼承特性
(2)類型轉換在運作時可以檢查和解釋一個類執行個體
(3)析構器讓一個類的執行個體可以釋放被配置設定的資源
(4)引用計數功能
           

注:屬性,方法,下标,構造過程,擴充,協定,繼承,類型轉換,析構過程和自動引用計數後面會具體講解。

8.2 最簡潔的定義格式

1). 枚舉定義

使用enum關鍵字定義枚舉

enum 枚舉名{
   case 枚舉值
   case 枚舉值
}
           

舉例:

enum Sex{
    case 男
    case 女
}
           

定義小王的性别是男性

var xiaoWangSex = Sex.男
           

定義變量時如果指定了枚舉的類型,Sex.男可以簡化為.男

var xiaoLiSex : Sex = .男
           

如下的各個case可以用一個case來簡寫

enum Age{
    case one
    case two
    case three
    case four
}
           

簡寫形式如下

enum Age2{
    case one, two, three, four
}
var xiaoWangAge = Age.two
           

2). 結構體定義

使用struct關鍵字定義結構體

struct 結構體名{
 }
           

舉例:

struct person2{
 }
           

定義執行個體xiaoWang

定義執行個體xiaoLi

3)類定義

使用class關鍵字定義結構體

class類名{
 }
           

舉例:

class person{
 }
           

8.3 我的經驗總結

1)枚舉的本質是一個資料類型。一個自定義的資料類型。主要是定義各種互斥值的資料類型。

2)枚舉的case後面是變量和常量,不能用已經知道的資料類型,例如

enum Age{
    case 1
    case 2
}
           

1和2屬于Int類型的值,這樣是不允許的。我們需要定義變量one和two才可以

3). 枚舉和switch經常配對使用

舉例

enum Sex{
    case 男
    case 女
}
var xiaoSongSex = Sex.男
switch xiaoSongSex {
case .男:
   print("小宋是男性")
case .女:
   print("小宋是女性")
}
           

4). 結構體是值類型,類是引用類型的總結

舉例:

class person{
    var age = 10
}
struct person2{
    var age = 20
}
 
var xiaoWang = person()
var xiaoLi = person2()
 
var xiaoWang2 = xiaoWang
xiaoWang.age = 15
print(xiaoWang2.age)
 
var xiaoLi2 = xiaoLi
xiaoLi.age = 15
print(xiaoLi2.age)
           

注:這裡var age = 10和var age = 20的age是屬性,對于屬性後面會做具體的講解。

類是引用類型,引用類型執行個體使用的解釋:

var xiaoWang2 = xiaoWang這一步實際是xiaoWang把值引用給了xiaoWang2,xiaoWang和xiaoWang2同時指向了1個記憶體位址。是以xiaoWang.age的值改變,xiaoWang2.age的值也跟着改變,此時xiaoWang2.age值是15

結構體是值類型,值類型執行個體使用的解釋:

var xiaoLi2 = xiaoLi這一步實際是xiaoLi把值拷貝一份給xiaoLi2,xiaoLi和xiaoLi2是有2個記憶體位址的。是以xiaoLi.age的值改變,xiaoLi2.age的值不改變,此時xiaoLi2.age的值是20

5). 類執行個體的比較

類是引用類型,比較兩個類執行個體是否等價與非等價的運算符如下

等價于 (=)

非等價 (!)

舉例

class person{
    var age = 10
}
class person2{
    var age = 10
}
var xiaoWang = person()
var xiaoWang2 = person2()
if xiaoWang === xiaoWang2{
}
           

注:本人水準和能力有限,如果哪些地方寫錯了,請大家給我回報,我會及時修改。