我正在重写一些代码,并尝试减少函数的嵌套。该函数将枚举作为参数并对其执行 switch
操作。这没关系,但它增加了两级缩进。
我想做的是这样的:
func getTrips<T : TripStatus.Confirmed> (status:T) {
//Do one thing
}
func getTrips<T : TripStatus.Unconfirmed> (status:T) {
//Do another thing
}
枚举的定义如下:
enum TripStatus:String {
case Confirmed = "Confirmed", Unconfirmed = "Unconfirmed", Tracking = "Tracking", Empty = "Empty"
}
目标是我可以调用 getTrips(status)
,Swift 根据枚举值选择正确的函数。
最佳答案
您可以向您的 TripStatus
添加一个计算属性,返回您要根据状态执行的函数,然后调用它。例如(在示例中我返回一个可选函数):
enum TripStatus: String {
case Confirmed = "Confirmed", Unconfirmed = "Unconfirmed", Tracking = "Tracking", Empty = "Empty"
var getTrips : (() -> ())? {
switch self {
case .Confirmed: return self.getConfirmedTrips
case .Unconfirmed: return self.getUnconfirmedTrips
default: return nil
}
}
func getConfirmedTrips() { print("getConfirmedTrips") }
func getUnconfirmedTrips() { print("getConfirmedTrips") }
}
let status = TripStatus.Confirmed
status.getTrips?() // prints getConfirmedTrips
关于swift - 根据参数调用不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399925/