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

    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  创建成功返回值

总结:

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。