gpt4 book ai didi

swift - 在变量中存储代码块

转载 作者:搜寻专家 更新时间:2023-11-01 07:17:46 24 4
gpt4 key购买 nike

这很简单,我确定我遗漏了什么。

我试图了解如何实现以下目标:action 应该“持有”一段代码,我最终将在 UIView.animate 中执行(对于例子)。

什么是正确的方法? + 我应该担心在 action 闭包中使用 self. 吗?

示例函数:

func forward(_ sender : UIButton) {

var action : <Clousre of somekind?>

switch currentPosition
{
case 0 : action = { self.view.background = .red }
case 1 : action = { self.view.background = .blue }
default : fatalError("No current Position")
}

UIView.animate(withDuration: 1, animations: {
action
})
}

谢谢! :)

最佳答案

声明如下:

var action: () -> Void

没有保留周期。

self 不包含对 action 的引用。

如果 action 是一个属性(在函数之外),就会有一个保留周期:

self.action <--> action = { self... }

放在一起:

var action : () -> Void

switch currentPosition {
case 0 : action = { /*do something*/ }
case 1 : action = { /*do something*/ }
default : fatalError("No current Position")
}

UIView.animate(withDuration: 1, animations: {
action()
})

// or

UIView.animate(withDuration: 1, animations: action)

(在 Playground 中编译良好)

关于swift - 在变量中存储代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066978/

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