0

これは大まかな例です (私が取り組んでいる実際のユースケースは、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 パターンはありますか?

4

1 に答える 1