Swift學(xué)習(xí)之枚舉的泛性

一、關(guān)聯(lián)值為泛型類型

 enum Result1<Success, Failure>{
   case success(Success),failure(Failure)
}

enum Result2<Success>{

  case success(Success),  failure(String)
}


enum Result3<Failure>{

  case success(Int), failure(Failure) 
}

 let result1 =  Result1<Int,String>.success(1)
 let result2 =  Result2<Int>.success(1) 
 let result3 =  Result3.failure(4)

在以上的例子中,關(guān)聯(lián)值是為Success或Failure類型,而Success或Failure類型是聲明的一個泛型類型,所以當(dāng)你要給枚舉的成員變量的關(guān)聯(lián)值存儲一個值時,你就需要先去告訴枚舉此時真實需要的是什么類型。例如:Result1<Int,String>就告訴,此時Success是Int類型,F(xiàn)ailure是String。當(dāng)然像 let result3 = Result3.failure(4),可以讓編譯器自動推斷處是Int時,就可以省略。

二、在閉包中的使用

閉包表達(dá)式

 enum Result1<Success, Failure>{
   case success(Success),failure(Failure)
}

    let fn = { (v1:Result1<Int,Int>) -> () in
            switch v1 {
                  case .success(let a):  print(a)
                  case  let .failure(b):  print(b)
            }
        }
            
        let fn1 = { (v1:Result1<Int,String>) -> () in
            switch v1 {
                  case .success(_):  print("測試")
                  case  .failure(_):  print("測試")
            }
        }
       
        let fn2 = { (v1:Result1<String,String>) -> () in
            print("測試")
        }
        fn(Result1<Int,Int>.success(1))
        fn1(Result1<Int,String>.failure("fff"))
        fn2(Result1<String,String>.failure("hhh"))

閉包作為參數(shù)類型

 enum Result1<Success, Failure>{
   case success(Success),failure(Failure)
}

func exec(fn: (Result1<Int,Int>) -> ()) {
        fn(Result1.success(200))
        fn(Result1.failure(12))
    }
    
    func exec1(fn: (Result1<String,Int>) -> ()) {
        fn(Result1.success("成功"))
        fn(Result1.failure(12))
    }
    
    exec{ (result:Result1<Int,Int>) in
                switch result{
                case .success(let a) :print(a)
                case .failure(let b):print(b)
               }
        }
        
        exec1 { response in
            switch response{
            case .success(let a) :print(a)
            case .failure(let b):print(b)
           }
        }

三、Swift 5之Result類型

http://www.itdecent.cn/p/78ad789577df
http://www.itdecent.cn/p/a3712edc9367

public enum Result<Success, Failure> where Failure : Error{
    case success(Success)
    case failure(Failure)
}

很顯然Result類型就是枚舉的泛性在閉包中使用的最大實踐

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

相關(guān)閱讀更多精彩內(nèi)容

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