function - 如何在 Swift 中创建 _inline_ 递归闭包?

标签 function swift recursion functional-programming

<分区>

递归对于 Swift 中的全局函数来说是微不足道的。例如:

func f()
{
    f()
}

但是,闭包不能引用自身。例如:

var f: (Void -> Void) =
{
    f()
}

产生以下错误:

Variable used within its own initial value

有解决办法吗?如何创建递归闭包内联

最佳答案

限制是两个对象不能同时实例化,不能互相引用。必须先创建一个。您可以将函数标记为隐式解包可选。这样您就可以使用 nil 初始化该函数,但“保证”它稍后会有一个值。

var f: (Void -> Void)!

f = {
    f()
}

更新: 另一种没有隐式解包选项的方法:

var f: (Void -> Void)

var placeholder: (Void -> Void) = {
    f()
}

f = placeholder

关于function - 如何在 Swift 中创建 _inline_ 递归闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30523285/

相关文章:

function - ASM , 用 asm 调用函数

ios - 水平自动布局约束

ios - 如何在 ios swift 中获取可用蓝牙设备的名称列表?

javascript - 避免重新绑定(bind)函数引用中的递归

java - boolean 递归的替代方法

java - 如何使用递归返回集合的所有大小为 k 的子集?

Swift 初学者需要详细说明语法 - 传递和返回函数

c - 将 struct var 分配给函数的 retval 时为 "Incompatible types"

在 C 编译期间更改函数体

ios - 如何切换自定义应用内键盘