gpt4 book ai didi

swift - 如何制作一个返回另一个函数的函数(返回另一个函数等等......)

转载 作者:搜寻专家 更新时间:2023-11-01 06:23:57 25 4
gpt4 key购买 nike

我正在尝试拥有一堆函数(没有输入参数),可以选择返回另一个同类函数,以实现如下目的:

var next = f1
do {
next = next()
} while next != nil

...

func f1() -> ????? {
return f2
}

func f2() -> ????? {
return f3
}

func f3() -> ????? {
return nil
}

所以要让函数返回将要使用的下一个函数。

问题是我似乎找不到有效的函数签名/返回值组合...

到目前为止我发现的唯一方法要求每个函数根据它返回的函数具有不同的签名,但这会阻止将它存储在变量中,并且有任何逻辑来决定返回哪个函数.. .

最佳答案

您可以通过制作自己的 OptionalFunc 枚举来做到这一点:

enum OptionalFunc {        
case Some(() -> OptionalFunc)
case None

var hasFunc: Bool {
switch self {
case .Some(_):
return true
case .None:
return false
}
}

func next() -> OptionalFunc {
switch self {
case .None:
return .None
case let .Some(block):
return block()
}
}
}

然后您可以像这样定义您的函数:

func f3() -> OptionalFunc {
println("3")
return .None
}

func f2() -> OptionalFunc {
println("2")
return .Some(f3)
}

func f1() -> OptionalFunc {
println("1")
return .Some(f2)
}

然后像这样遍历它们:

var next: OptionalFunc = .Some(f1)
while next.hasFunc {
next = next.next()
}

全部放入 Playground ,输出:

1
2
3

关于swift - 如何制作一个返回另一个函数的函数(返回另一个函数等等......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com