我目前正在尝试了解将enums
功能/闭包作为关联值的用途和用途。我确实理解enums
保持价值的目的如下...
enum Homework{
case InProgress(Int, Int)
case Complete
}
let load = Homework.InProgress(50, 100)
switch load {
case .InProgress(let done, let total):
print("\(done) out of \(total)")
case .Complete:
print("complete")
}
我不明白将闭包作为emum的值的目的以及如何使用它。
有人可以解释将闭包与枚举关联的主要目的吗?
您将在何处以及如何使用类似以下代码的内容?有人可以举个简单的例子吗?
enum SomeEnum{
case ClosureOne (String, Double-> Double)
case ClosureTwo (String, (Double, Double) ->Double)
}
谢谢
正如@ luk2302所指出的,从字面上看,寻找随机类型的用例是“一种寻找问题的解决方案”。但这也许有助于扩大人们对可能的想法。
也就是说,将函数嵌入枚举与其他任何函数参数一样有用。例如,您可以使用它以错误类型传递恢复功能:
enum Error: ErrorType {
case Temporary(message: String, recovery: () -> Void)
case Final(message: String)
}
func reconnect() {}
let err = Error.Temporary(
message: "Network down",
recovery: { reconnect() }
)
switch err {
case let .Temporary(message, recovery):
print(message)
recovery()
case let .Final(message):
print(message)
fatalError()
}
或者,您可以在任何状态机中传递“如何转换为下一个状态”(这对于枚举是非常普遍的用法)。
enum State {
case Login(next: (password: String) -> State)
case Connecting(next: (Connection) -> State)
case Connected(next: (Connection) -> State)
case Disconnected(next: () -> State)
}
这将允许每个状态转换直接控制下一个状态转换,在某些情况下,这比使所有逻辑集中化更好(特别是如果合法转换取决于路径)。
但是,正如@ luk2302所说,函数值只是值。如果枚举可以包含除函数以外的任何值,那将是非常不幸的特殊情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句