public enum NameType {
//注意看第2 和 第3個枚舉值
case english, enumDirect(String), enumClosure(() -> String)
}
override func viewDidLoad() {
//第一種,傳入的是方法返回值
currentNameType = .enumDirect(creatorFunc())
print("will getNameType")
switch currentNameType {
case .english:
print("當前是english")
case .enumDirect(let str):
print("當前是enumDirect ",str)
case .enumClosure(let returnStringFunc):
//注意,case這里的參數(shù)(方法名)可以自己定義,無需和本尊方法名一致
print("當前是enumClosure ",returnStringFunc())
}
}
func creatorFunc() -> String {
print("執(zhí)行creatorFunc")
return "創(chuàng)建成功返回值"
}
//以下是日志打印
執(zhí)行creatorFunc
will getNameType
當前是enumDirect 創(chuàng)建成功返回值
override func viewDidLoad() {
//第二種,傳入的是方法名
currentNameType = .enumClosure(creatorFunc)
print("will getNameType")
switch currentNameType {
case .english:
print("當前是english")
case .enumDirect(let str):
print("當前是enumDirect ",str)
case .enumClosure(let returnStringFunc):
//注意,case這里的參數(shù)(方法名)可以自己定義,無需和本尊方法名一致
print("當前是enumClosure ",returnStringFunc())
}
}
func creatorFunc() -> String {
print("執(zhí)行creatorFunc")
return "創(chuàng)建成功返回值"
}
//以下是日志打印,可以看出來,前兩句調(diào)用順序反了
will getNameType
執(zhí)行creatorFunc
當前是enumClosure 創(chuàng)建成功返回值
總結(jié):
如果枚舉值,是方法閉包,那么只有在取值的時候,才觸發(fā)方法體中的代碼。
所以建議大家枚舉值里是方法閉包,而不是直接的值。這樣可以節(jié)省不必要的代碼執(zhí)行,只有在確實用到某個枚舉值的時候,才觸發(fā)方法