私は、マネージャーで自分の関数を管理しようとしています。問題は、機能コードが更新され、マネージャーに機能を追加した瞬間に保存されないということです。関数の配列が作成時の値を保持しない
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
何が間違っていますか?前もって感謝します!
EDIT:非常に簡単な遊び場例:
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
EDIT 2: 私は2 2は、私のコードのための右の出力であることを知っています。しかし、私は創造の状態で機能を保持したい。これは何とか可能ですか?
編集3: ご協力いただきありがとうございます。しかし、私は答えを納得させるのに十分なほど問題を説明できないと思う。私は後でそのパラメータで関数を呼びたいと思う。私はパラメータ値への参照を保持したくありません。私はこれらのパラメータ値で関数を呼び出す必要があります。あなたのコードに基づいて
関数を作成した状態に保つことは可能ですか?私は後でそれを追加したときの価値と呼んでいます。 –
確かに、あなたがする必要があるのは、あなたが価値あるものを渡すことです。私はこれを達成する最も単純な方法で答えを更新しました。 – NSAdi
あなたの答えをありがとう!しかし、それは本当に汚い解決策のように思えます。私はこれで100以上の機能を管理しています。私はそれぞれの関数の新しい変数を作成する場合、私は1000以上の新しい値を作成します。これをアーカイブするには別の方法が必要です。他の言語でも可能です。 –