二十二 Swift5 0之 列舉

2021-07-30 06:33:08 字數 1763 閱讀 4493

全系列導航:swift5.0 系列部落格索引

/*

swift列舉:

swift中的列舉比oc中的列舉強大, 因為swift中的列舉是一等型別, 它可以像類和結構體一樣增加屬性和方法

格式:enum method

*/enum

method

// 可以使用列舉型別變數或常量接收列舉值

var m:

method=.

add// 注意: 如果變數或常量沒有指定型別, 那麼前面必須加上該值屬於哪個列舉型別

var m1 =

method

.add

// 利用switch匹配

// 注意: 如果case中包含了所有的值, 可以不寫default. 如果case中沒有包含列舉中所有的值, 必須寫default

switch

(m)/*

原始值:

oc中列舉的本質就是整數,所以oc中的列舉是有原始值的,預設是從0開始

而swift中的列舉預設是沒有原始值的, 但是可以在定義時告訴系統讓列舉有原始值

enum method: 列舉值原始值型別

*/enum

method2

:int

// 和oc中的列舉一樣, 也可以指定原始值, 後面的值預設+1

enum

method3

:int

// swift中的列舉除了可以指定整形以外還可以指定其它型別, 但是如果指定其它型別, 必須給所有列舉值賦值, 因為不能自動遞增

enum

method4

:double

// rawvalue代表將列舉值轉換為原始值, 注意老版本中轉換為原始值的方法名叫toraw

print

(method4

.sub

.rawvalue)

// 原始值轉換為列舉值

enum

method5

:string

// 通過原始值建立列舉值

/*注意:

1.原始值區分大小寫

2.返回的是乙個可選值,因為原始值對應的列舉值不一定存在

3.老版本中為fromraw("add")

*/let m2 =

method5

(rawvalue:

"add"

)print

(m2 as

any)

//func choosemethod(op:method2)

func

choosemethod

(op:

string)}

}/*列舉相關值:

可以讓列舉值對應的原始值不是唯一的, 而是乙個變數.

每乙個列舉可以是在某種模式下的一些特定值

*/enum linesegmentdescriptor

var lsd = linesegmentdescriptor.

startandlengthpattern

(start:

0.0, length:

100.0

)lsd = linesegmentdescriptor.

startandendpattern

(start:

0.0, end:

50.0

)// 利用switch提取列舉關聯值

/*switch lsd

*/// 提取關聯值優化寫法

switch lsd

三十二 Swift5 0之 記憶體相關

swift記憶體管理 管理引用型別的記憶體,不會管理值型別,值型別不需要管理 記憶體管理原則 當沒有任何強引用指向物件,系統會自動銷毀物件 預設情況下所有的引用都是強引用 如果做到該原則 arc class person deinit var p person?person name gezi p ...

四 Swift 5 0之 Bool型別

全系列導航 swift5.0 系列部落格索引 c語言和oc並沒有真正的bool型別 c語言的bool型別非0即真 oc語言的bool型別是typedef signed char bool swift引入了真正的bool型別 bool true false let isopen bool true l...

六 Swift5 0之 可選值

全系列導航 swift5.0 系列部落格索引 可選值 optionals有兩種狀態 1.有值 2.沒有值,沒有值就是nil 有值 var optvalue1 int?9 沒有值 var optvalue2 int?var optvalue3 int?nil 可選值可以利用if語句來進行判斷 var ...