我尝试用管理器管理我的功能。问题是功能代码更新并且在我将该功能添加到我的管理器的那一刻不会保存。我尝试用这个例子来解释我的问题:功能数组不会保留其创建的值
class QueueManager {
typealias FunctionType =() ->()
private var functions = [(String, FunctionType)]()
func add(funcName: String, function: FunctionType) -> QueueManager {
functions.append(funcName, function)
return self
}
func runFirst() -> Bool {
guard functions.isEmpty == false else { return false }
functions.first!.1()
functions.removeFirst()
return true
}
}
那么我这样做:
let queueManager = QueueManger()
var value = 1
queueManager.add("simpleFunction"){
print(value)
}
value = 2
queueManager.add("simpleFunction"){
print(value)
}
queueManager.runFist()
queueManager.runFist()
,其结果是:
2 // Because value is 2 in both functions. But i added the function while value was 1??
2
但我想要的结果:
1
2
我在做什么错?提前致谢!
编辑:很容易操场例如:
import UIKit
var str = "1"
func go() {
print(str)
}
var array:[()->()] = []
array.append(go)
str = "2"
array.append(go)
array[0]()
array[1]()
// Output:
// 2
// 2
编辑2: 我知道2 2是我的代码正确的输出。但是我想把它的功能保持在创作状态。这是否有可能?
编辑3: 非常感谢您的帮助。但我认为我没有足够的解释我的问题来得到答案。我想在稍后调用一个带有参数的函数。我不想保留对参数值的引用。我只需要用这些参数值调用函数。
是否可以将该功能保持在创建状态?我想在稍后用它添加它时的价值来调用它。 –
当然,你需要做的就是确保你的价值传递。我用最简单的方法更新了答案。 – NSAdi
感谢您的回答!但这似乎是一个非常肮脏的解决方案。我用这个管理了100多个功能。如果我将为每个函数创建新的变量,我将创建超过1000个新值。必须有其他方法来存档。其他语言也可能。 –