yag*_*eek 4 enums pattern-matching optional swift
我目前正在使用Alamofire,我使用枚举来描述我在自述文件中建议使用的API.
端点表示如下:
public enum API {
case GetStops(stopCode:String?)
case GetPhysicalStops
case GetLinesColors
case GetNextDepartures(stopCode:String, departureCode:String?, linesCode:String?, destinationsCode:String?)
}
Run Code Online (Sandbox Code Playgroud)
可选参数是互斥的:
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])
}
}()
Run Code Online (Sandbox Code Playgroud)
是否有办法来自动解开可选包含(像if let),元组内,并避免明确地解开像在此声明:
case .GetStops(let stopCode) where stopCode != nil :
return ("GetStops.json", ["stopCode" : stopCode!])
Run Code Online (Sandbox Code Playgroud)
你可以使用.Some(x)模式(.some(x)在Swift 3中):
case .GetStops(let .Some(stopCode)):
return ("GetStops.json", ["stopCode" : stopCode])
Run Code Online (Sandbox Code Playgroud)
从Swift 2(Xcode 7)开始,这可以缩短为x?模式:
case .GetStops(let stopCode?):
return ("GetStops.json", ["stopCode" : stopCode])
Run Code Online (Sandbox Code Playgroud)
测试相关值为非零和展开(类似于可选绑定).
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |