我正在对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个未使用的参数?
提前致谢
答案 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
的常量。