【问题标题】:What does it mean in Swift: 'case .success(let dict):'在 Swift 中是什么意思:'case .success(let dict):'
【发布时间】:2017-08-25 17:35:08
【问题描述】:

在 Swift PromiseKit 库中有一个使用有点奇怪语法的 Alamofire 示例:

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 枚举,描述了具有关联值的两种情况:

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

我不明白let 在每个case: 行中的含义是什么? dict(或错误)来自哪里?这种语法糖是为了更冗长但不那么混乱吗?

【问题讨论】:

    标签: ios swift alamofire promisekit


    【解决方案1】:

    在 Swift 中,枚举可以有关联的值 (docs)。这意味着,您可以将对象与案例相关联。 (let dict) 部分只是意味着 - 获取关联的值,并放入名为 dictlet 常量。

    【讨论】:

    • 好的,所以我们基本上是在测试 enum 是 .success 还是 .failure 而(let xxx) 部分基本上是关联值的某种快捷方式?
    • 正确。你也可以写成case let .success(dict):
    • Swift 语法有时不会因为它允许的快捷方式而让我感到惊讶。 :-)
    • 另外,我发誓我查看了文档中的枚举相关值,它不存在,但显然存在。 :-)
    • 有谁知道这两种语法 case let .success(value) vs case .success(let value) 的区别
    猜你喜欢
    • 2015-03-17
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多