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這里的參數(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ā)方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容