斯威夫特:“_,_”是什么意思?

时间:2016-04-09 05:15:46

标签: swift alamofire

我正在对Alamofire进行一些研究,我遇到了这段代码:

    switch encodingResult {

    case .Success(let upload, _, _):

    upload.responseJSON { response in

        if let info = response.result.value as? Dictionary<String, AnyObject> {

            if let links = info["links"] as? Dictionary<String, AnyObject> {

                if let imgLink = links["image_link"] as? String {

                    print("LINK: \(imgLink)")
                }
            }
        }

    } case .Failure(let error):
        print(error)
}

我可以知道_,_是什么意思吗?

我看过像let _ = "xyz"这样的用途,但我从来没有像以前的代码那样使用它。

是否意味着它有2个未使用的参数?

提前致谢

1 个答案:

答案 0 :(得分:0)

此switch语句正在切换枚举的情况。 .Success中的前导点告诉您Success是Enum的案例之一。

Swift Enums允许您使用关联值(不要与协议的关联值混淆),这使得Enum的情况可以存储数据。 Swift文档提供的示例是条形码枚举,它编码标准条形码和QR码:

enum Barcode {
    case UPCA(Int, Int, Int, Int)
    case QRCode(String)
}

这表示UPCA条形码有四个Int值,QR码给出一个String值,可以读取和写入。例如,var productBarcode = Barcode.UPCA(8, 85909, 51226, 3)创建一个Barcode类型的对象,其值为.UPCA(8, 85909, 51226, 3);你不需要Enum的全名(只是前导点)因为类型可以由编译器推断。

当切换枚举的情况时,您可以将匹配的大小写的相关类型值分配给变量,然后在块中使用这些变量。

switch productBarcode {
case let .UPCA(numberSystem, manufacturer, product, check):
    print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case let .QRCode(productCode):
    print("QR code: \(productCode).")
}

如果productBarcode.UPCA个案例,则它与第一个案例相匹配,并相应地分配这些变量,如果是.QRCode,则类似。

变量赋值列表中的下划线只是告诉Swift丢弃那里的值而不是将其赋值给变量。对于代码,它只将三个关联类型值中的第一个分配给名为upload的常量。