全系列導航: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 ...