관리자와 함께 내 기능을 관리하려고합니다. 문제는 기능 코드가 업데이트되어 관리자에게 기능을 추가하는 순간 저장되지 않는다는 것입니다.함수 배열이 생성시 값을 유지하지 않습니다.
let queueManager = QueueManger()
var value = 1
queueManager.add("simpleFunction"){
print(value)
}
value = 2
queueManager.add("simpleFunction"){
print(value)
}
queueManager.runFist()
queueManager.runFist()
그리고 결과입니다 : 그럼이 할
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
}
}
:이 예제를 내 문제를 설명하려고
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 내 코드에 적합한 출력 것을 알고있다. 그러나 저는 그 기능을 창조 상태로 유지하고 싶습니다. 어떻게 든 가능합니까?
편집 3 : 도움 주셔서 감사합니다. 그러나 나는 내 문제를 충분히 설명해 줄 수는 없다고 생각한다. 나중에 매개 변수가있는 함수를 호출하려고합니다. 필자는 매개 변수 값에 대한 참조를 유지하고 싶지 않습니다. 그 매개 변수 값으로 함수를 호출하면됩니다. 코드를 기반으로
이
함수를 생성 상태로 유지할 수 있습니까? 나는 그것을 나중에 추가했을 때의 가치와 함께 나중에 전화하고 싶다. –
물론, 당신이해야 할 일은 가치있게 전달하는 것입니다. 나는 이것을 달성하는 가장 간단한 방법으로 대답을 업데이트했다. – NSAdi
답변 해 주셔서 감사합니다! 그러나 그것은 정말 더러운 해결책처럼 보입니다. 이것으로 100 개가 넘는 기능을 관리합니다.함수의 각각에 대해 새로운 변수를 만들면 나는 1000 개가 넘는 새로운 값을 생성합니다. 이것을 보관할 다른 방법이 있어야합니다. 다른 언어에서도 가능합니다. –