gpt4 book ai didi

与枚举和可选元组关联值的 Swift 模式匹配

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:16 24 4
gpt4 key购买 nike

我目前正在使用 Alamofire,我使用枚举来描述我按照自述文件中的建议使用的 API。

端点表示如下:

public enum API {
case GetStops(stopCode:String?)
case GetPhysicalStops
case GetLinesColors
case GetNextDepartures(stopCode:String, departureCode:String?, linesCode:String?, destinationsCode:String?)
}

可选参数是互斥的:

 public var URLRequest: NSMutableURLRequest {

let result:(path:String, parameters:[String:AnyObject]?) = {
switch self {
case .GetStops(let stopCode) where stopCode != nil :
return ("GetStops.json", ["stopCode" : stopCode!])
case .GetStops(_):
return ("GetStops.json", nil)
case .GetPhysicalStops:
return ("GetPhysicalStops.json", nil)
case .GetLinesColors:
return ("GetLinesColors",nil)
case .GetNextDepartures(let stopCode, let departureCode, _, _) where departureCode != nil:
return ("GetNextDepartures", ["stopCode" : stopCode, "departureCode": departureCode!])
case .GetNextDepartures(let stopCode, _, let linesCode, _) where linesCode != nil:
return ("GetNextDepartures", ["stopCode" : stopCode, "linesCode": linesCode!])
case .GetNextDepartures(let stopCode, _, _, let destinationsCode) where destinationsCode != nil:
return ("GetNextDepartures", ["stopCode" : stopCode, "destinationsCode": destinationsCode!])
case .GetNextDepartures(let stopCode,_,_,_):
return ("GetNextDepartures",["stopCode":stopCode])
}
}()

有没有一种方法可以自动解包元组中包含的可选项(如 if let)并避免像在这个语句中那样显式解包:

case .GetStops(let stopCode) where stopCode != nil :
return ("GetStops.json", ["stopCode" : stopCode!])

最佳答案

您可以使用 .Some(x) 模式(.some(x) 在 Swift 3 中):

case .GetStops(let .Some(stopCode)):
return ("GetStops.json", ["stopCode" : stopCode])

从 Swift 2 (Xcode 7) 开始,这可以更短地写成 x? 模式:

case .GetStops(let stopCode?):
return ("GetStops.json", ["stopCode" : stopCode])

关联值被测试为非零且未包装(类似于可选绑定(bind))。

关于与枚举和可选元组关联值的 Swift 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32859646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com