首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:如何根据完成块中的结果重新运行函数?

Swift:如何根据完成块中的结果重新运行函数?
EN

Stack Overflow用户
提问于 2016-05-10 04:43:40
回答 1查看 238关注 0票数 0

这是一个粗略的示例(我正在处理的实际用例与PHImageManager的requestImageForAsset: function的内部结构有关),但我正在寻找一种允许您根据完成块中的结果重新运行函数的模式。

游乐场代码:

代码语言:javascript
复制
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,以查看何时显示"re- run“消息。

对于我想要做的事情,有没有一个通用的Swift模式?

EN

回答 1

Stack Overflow用户

发布于 2016-05-10 04:50:56

看看这段代码,也许它会帮助你找到你想要的:

代码语言:javascript
复制
override func viewWillAppear(animated: Bool) {
    rerunThis(0, callback: { (number_returned: Int, returned: Bool) in
        println("returned: \(number_returned), \(returned)");

        self.rerunThis(number_returned, callback: { (new_number_returned: Int, returned: Bool) in
            println("new returned: \(new_number_returned), \(returned)");
        });
    });
}

func rerunThis(last_number: Int, callback: ((Int, Bool)->Void)) {
    let new_value: Int = last_number+1;
    var return_this: Bool = false;
    if (new_value <= 1){
        return_this = true;
    }
    callback(new_value, return_this);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37125112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档