2017-03-31 62 views
1

在斯威夫特PromiseKit庫有使用有點奇怪的語法Alamofire例如:是什麼意思斯威夫特:「情況.success(讓字典):」

func login(completionHandler: (NSDictionary?, ErrorProtocol?) -> Void { 
    Alamofire.request(.GET, url, parameters: ["foo": "bar"]) 
     .validate() 
     .responseJSON { response in 
      switch response.result { 
      case .success(let dict): 
       completionHandler(dict, nil) 
      case .failure(let error): 
       completionHandler(nil, error) 
      } 
     } 
} 

response是Alamofire枚舉描述與相關2案件值:

public enum Result<Value> { 
    case success(Value) 
    case failure(Error) 
(...) 

什麼我不明白是什麼意思let每個case:線和哪裏的字典(或錯誤)從何而來?這個語法糖對於更冗長但更少混淆的東西?

回答

4

在Swift中,枚舉可以有相關的值(docs)。這意味着,您可以將對象與案例關聯起來。部分(let dict)只是意味着 - 取相關值,並放入一個名爲dictlet常量中。

+1

好的,所以我們基本上測試枚舉是.success還是.failure,'(let xxx)'部分基本上是某種快捷方式獲取相關值的方式? – konrad

+0

正確。你也可以把它寫成'case let .success(dict):' –

+0

Swift語法有時候可以用它允許的快捷方式讓我感到驚訝。 :-) – konrad