gpt4 book ai didi

swift - 如何将闭包作为变量传递?

转载 作者:行者123 更新时间:2023-12-04 01:13:20 26 4
gpt4 key购买 nike

我有来自 playground 的以下代码:

class MyButton {
var pressed: (() -> Void)?

func press() {
pressed?()
}
}

class SomeView {
var buttonDidPressed: (() -> Void)?

let button = MyButton()

init() {
button.pressed = buttonDidPressed
}

func press() {
button.press()
}
}

let view = SomeView()

view.buttonDidPressed = {
print("pressed")
}

view.press()

MyButton 有闭包 pressed ,它在调用 press 时执行。在 SomeView 的初始化中,我为那个 pressed 闭包赋值。当然,在初始化时,它是 nil。但是在 SomeView 初始化之后,我为那个 buttonDidPressed 闭包赋值。因为,闭包是引用类型,当 view.press 被调用时, buttonDidPressed 不应该是 nil。但是,无论如何,我的打印没有执行。为什么?

最佳答案

您首先初始化 SomeView(调用 init 函数),然后设置 buttonDidPressed 属性。因此,buttonDidPressed 属性具有您的闭包,但从未将其传递给 MyButton 实例。

您可以使用didSet 立即更新它:

class SomeView {
var buttonDidPressed: (() -> Void)? {
didSet {
button.pressed = buttonDidPressed
}
}

let button = MyButton()

func press() {
button.press()
}
}

更新:您还可以像这样在 SomeView 的初始化程序中传递闭包:

class SomeView {
let button = MyButton()

init(buttonDidPressed: (() -> Void)?) {
button.pressed = buttonDidPressed
}

func press() {
button.press()
}
}

let view = SomeView {
print("pressed")
}

view.press()

关于swift - 如何将闭包作为变量传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64124296/

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