在Swift中理解带有函数作为关联值的枚举

fs_tigre

我目前正在尝试了解将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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有关联值的Swift枚举

来自分类Dev

带有关联值的Swift枚举

来自分类Dev

如何在Swift中检查带有关联值的枚举的枚举大小写

来自分类Dev

将带有关联值的枚举存储在NSUserDefaults(Swift)中

来自分类Dev

如何创建带有关联值(如Swift枚举)的Java枚举?

来自分类Dev

带有关联值的快速枚举中的等式运算符重载

来自分类Dev

Swift枚举作为函数中的参数

来自分类Dev

Swift枚举作为函数中的参数

来自分类Dev

Kotlin:具有关联值的枚举;“enum entry”中的函数得到“unresolved reference”错误

来自分类Dev

如何在JavaScript中实现具有关联值的类似Swift的枚举?

来自分类Dev

是否可以通过扩展将关联的值添加到现有的Swift枚举中?

来自分类Dev

Swift-在具有关联值的枚举数组中查找对象

来自分类Dev

是否可以通过扩展将关联的值添加到现有的Swift枚举中?

来自分类Dev

Swift枚举-约束关联值

来自分类Dev

没有关联值的引用Swift枚举成员

来自分类Dev

如何在Swift枚举中打印关联值?

来自分类Dev

枚举作为具有返回值的类成员函数

来自分类Dev

Swift协议可选函数中如何使用枚举作为参数

来自分类Dev

带有关联值的开关内部的Swift Mutation

来自分类Dev

Swift:无法打开枚举关联值

来自分类Dev

将Swift枚举与关联值映射

来自分类Dev

比较Swift枚举,无论关联值如何

来自分类Dev

枚举Swift中的函数

来自分类Dev

带有浮点原始值的Swift枚举,“枚举大小写的原始值不是唯一的”

来自分类Dev

带有约束的泛型类型的关联值的枚举大小写

来自分类Dev

Swift-将Nil作为带有可选参数的泛型函数中的参数

来自分类Dev

在带有可变参数的函数中传递“枚举”时出错

来自分类Dev

如何在Emscripten中包装或调用带有void作为返回值的C函数?

来自分类Dev

带有字符串参数的Swift枚举函数使用枚举类的参数调用

Related 相关文章

  1. 1

    带有关联值的Swift枚举

  2. 2

    带有关联值的Swift枚举

  3. 3

    如何在Swift中检查带有关联值的枚举的枚举大小写

  4. 4

    将带有关联值的枚举存储在NSUserDefaults(Swift)中

  5. 5

    如何创建带有关联值(如Swift枚举)的Java枚举?

  6. 6

    带有关联值的快速枚举中的等式运算符重载

  7. 7

    Swift枚举作为函数中的参数

  8. 8

    Swift枚举作为函数中的参数

  9. 9

    Kotlin:具有关联值的枚举;“enum entry”中的函数得到“unresolved reference”错误

  10. 10

    如何在JavaScript中实现具有关联值的类似Swift的枚举?

  11. 11

    是否可以通过扩展将关联的值添加到现有的Swift枚举中?

  12. 12

    Swift-在具有关联值的枚举数组中查找对象

  13. 13

    是否可以通过扩展将关联的值添加到现有的Swift枚举中?

  14. 14

    Swift枚举-约束关联值

  15. 15

    没有关联值的引用Swift枚举成员

  16. 16

    如何在Swift枚举中打印关联值?

  17. 17

    枚举作为具有返回值的类成员函数

  18. 18

    Swift协议可选函数中如何使用枚举作为参数

  19. 19

    带有关联值的开关内部的Swift Mutation

  20. 20

    Swift:无法打开枚举关联值

  21. 21

    将Swift枚举与关联值映射

  22. 22

    比较Swift枚举,无论关联值如何

  23. 23

    枚举Swift中的函数

  24. 24

    带有浮点原始值的Swift枚举,“枚举大小写的原始值不是唯一的”

  25. 25

    带有约束的泛型类型的关联值的枚举大小写

  26. 26

    Swift-将Nil作为带有可选参数的泛型函数中的参数

  27. 27

    在带有可变参数的函数中传递“枚举”时出错

  28. 28

    如何在Emscripten中包装或调用带有void作为返回值的C函数?

  29. 29

    带有字符串参数的Swift枚举函数使用枚举类的参数调用

热门标签

归档