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这里的参数(方法名)可以自己定义,无需和本尊方法名一致
print("当前是enumClosure ",returnStringFunc())
}
}
func creatorFunc() -> String {
print("执行creatorFunc")
return "创建成功返回值"
}
//以下是日志打印
执行creatorFunc
will getNameType
当前是enumDirect 创建成功返回值
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这里的参数(方法名)可以自己定义,无需和本尊方法名一致
print("当前是enumClosure ",returnStringFunc())
}
}
func creatorFunc() -> String {
print("执行creatorFunc")
return "创建成功返回值"
}
//以下是日志打印,可以看出来,前两句调用顺序反了
will getNameType
执行creatorFunc
当前是enumClosure 创建成功返回值
总结:
如果枚举值,是方法闭包,那么只有在取值的时候,才触发方法体中的代码。
所以建议大家枚举值里是方法闭包,而不是直接的值。这样可以节省不必要的代码执行,只有在确实用到某个枚举值的时候,才触发方法
网友评论