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

2024-04-23

我目前正在使用 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)在斯威夫特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])

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与枚举和可选元组关联值进行 Swift 模式匹配 的相关文章

随机推荐