これは大まかな例です (私が取り組んでいる実際のユースケースは、PHImageManager の requestImageForAsset: 関数の内部に関係しています)、結果に基づいて関数を再実行できるパターンを探しています。完了ブロック。
遊び場コード:
private func subtractTen (value: Int, completion: (success: Bool, newVal: Int, [NSObject: AnyObject]?) -> Void) -> Int {
// This is private to represent a black box.
// In my personal use-case, it's actually a Foundation method
completion(success: (value - 10 >= 0), newVal: value - 10, nil)
return value - 10
}
func alwaysPositive (value: Int) -> Int {
var foo: Int
foo = subtractTen(value) { success, newVal, _ in
if success {
print ("yay")
} else {
// I need subtractTen re-run with a new input: newVal
// and I need the resulting value in the calling function
// (in this case, "foo")
print ("re-run subtractTen with newVal, and return the value to the parent function")
}
return
}
return foo
}
alwaysPositive(10)
1、2、9、10、11 などの値を指定して alwaysPositive を実行すると、「再実行」メッセージがいつ表示されるかを確認できます。
私がやろうとしていることに共通の Swift パターンはありますか?