一、關(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類型是聲明的一個(gè)泛型類型,所以當(dāng)你要給枚舉的成員變量的關(guān)聯(lián)值存儲(chǔ)一個(gè)值時(shí)色冀,你就需要先去告訴枚舉此時(shí)真實(shí)需要的是什么類型。例如:Result1<Int,String>就告訴柱嫌,此時(shí)Success是Int類型锋恬,F(xiàn)ailure是String。當(dāng)然像 let result3 = Result3.failure(4)编丘,可以讓編譯器自動(dòng)推斷處是Int時(shí)与学,就可以省略。
二嘉抓、在閉包中的使用
閉包表達(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("測(cè)試")
case .failure(_): print("測(cè)試")
}
}
let fn2 = { (v1:Result1<String,String>) -> () in
print("測(cè)試")
}
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.reibang.com/p/78ad789577df
http://www.reibang.com/p/a3712edc9367
public enum Result<Success, Failure> where Failure : Error{
case success(Success)
case failure(Failure)
}
很顯然Result類型就是枚舉的泛性在閉包中使用的最大實(shí)踐