美文网首页
Swift枚举enum,枚举值case(方法体) 与 case(

Swift枚举enum,枚举值case(方法体) 与 case(

作者: 大鼓书 | 来源:发表于2021-09-13 20:57 被阅读0次
    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  创建成功返回值

总结:

如果枚举值,是方法闭包,那么只有在取值的时候,才触发方法体中的代码。

所以建议大家枚举值里是方法闭包,而不是直接的值。这样可以节省不必要的代码执行,只有在确实用到某个枚举值的时候,才触发方法

相关文章

网友评论

      本文标题:Swift枚举enum,枚举值case(方法体) 与 case(

      本文链接:https://www.haomeiwen.com/subject/evwfgltx.html