问题标签 [completion-block]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1357 浏览

objective-c - 如何将 Objective-C 的完成块转换为 Swift?

我尝试将 Objective-C 块语法转换为 Swift Xcode 6.3.2

完成块类型定义:

在网上冲浪后,我尝试了

但它告诉我错误

预期的 ',' 分隔符

表达式列表中的预期表达式

0 投票
1 回答
218 浏览

ios - 在 Swift 中是否有一种简洁的方法可以将完成块附加到 NSURLSessionDataDelegate 回调?

好的,这是交易:

我在 Swift 应用程序中进行了 URL 调用,有点像这样:

实际上,完全一样,因为它是我正在使用的函数(静态类函数)。

有问题的行是这一行:

“urlExtraData”是我之前声明的字典:

并在此处分配:

完成块 typedef 在这里:

会话设置在这里:

委托响应处理程序在这里:

我认为使用字典来保存第二个回调是一个令人讨厌的、臭名昭著的黑客行为。但是,我没有找到将 refCon 附加到任务的方法。我宁愿将辅助完成块直接附加到任务,而不是使用单独的字典。

我很乐意被告知我的方法很糟糕,只要我得到更好的东西。

有接盘侠吗?

谢谢!

0 投票
2 回答
205 浏览

swift - 快速完成块

我想实现以下目标:

  1. 在 B 类中,添加 1 个对象后重新加载我的数据库。reloadDatabase()在完成块中调用。
  2. 在 classB 中,reloadDatabase()将调用getObjects()classA获取最新的数据库对象列表并传递给objectListclassB

问题:我如何确保每当我调用getObjectList()B 类时,我总是能得到最新的列表?据我了解,我objectList可能不会在reloadDatabase() block. 我可以在尚未到达完成块 getObjectList()时调用(objectList 仍然是旧的 objectList)。reloadDatabase()

我对闭包和块很陌生。非常感谢任何指导!

0 投票
1 回答
963 浏览

ios - CKModifyRecordsOperation completion Swift 2.0

I have the code below but I am shown an error when building with Xcode 7 and Swift 2.0

The error is Cannot call value non-function type (([CKRecord]?, [CKRecordID]?, NSError?) -> Void)? Thanks

0 投票
1 回答
210 浏览

swift - NSURLSession,完成块,Swift

我正在使用 NSURLSession。我有一个包含餐厅的数组,我正在请求数组中每个餐厅的菜肴到 api。dataTask 有效,我只是在所有 dataTask 完成后才尝试调用方法。

self.updateDataSourceAndREloadTableView 永远不会被调用,无论我的完成块如何。这是我的 findAllDishesOfRestaurants 函数

这是我执行数据任务的功能。

就像我之前说的,我需要等到有趣的 findAllDishesOfRestaurants 完成。我试着写我的完成块,但我不确定我做得对。任何帮助是极大的赞赏。感谢

0 投票
1 回答
151 浏览

ios - 在 MZFormSheetController 中使用 didDismissCompletionHandler

我正在使用MZFormSheetController在我的应用程序中呈现模式。有一种情况,我想在我关闭第一个表单控制器后立即展示第二个表单控制器。为了做到这一点,有一个完成块,但我不知道如何实际使用它。

代码如下所示:

在那个完成处理程序中,我应该怎么做才能得到工作表解雇的通知,以便我可以调用第二张工作表?

0 投票
1 回答
209 浏览

ios - 用于 for 循环内动画的 Objective-C 完成块(暂停循环处理)

我有一种方法可以淡入,然后淡出一个按钮标签(如下所示):

这按预期工作。但是,我想循环遍历数组的内容,而不是单个字符串(例如,淡入“A”,淡出“A”,淡入“B”,淡出“B”.. ...)。

在上面的代码中,完成块在开始淡出之前等待淡入完成(好)。但是,如果我尝试使用 for 循环处理数组(修改方法以接受数组并在迭代数组的 for 循环中嵌套操作),循环会立即循环,而不是等待第一个字符完成。

有没有办法在第二个动画动作中使用完成块来暂停循环处理 - 还是我以错误的方式处理这个?

0 投票
1 回答
749 浏览

swift - 向 CloudKit 函数添加完成块

我的 ViewController 想要显示一些基于 CloudKit 查询的数据。

我的 CloudKit 代码都在一个单独的类中。该类有一个名为 loadExpenses() 的函数,它从 CK 获取一些 Expenses 实体。

我希望能够从 VC 调用 loadExpenses(),因此我需要该函数提供的完成块来从 VC 更新 UI。

这就是 loadExpenses() 的样子:

显然最后一部分不会执行,考虑到所有这些 self.property 属于 VC(我保留它们只是为了展示我需要在 VC 中做什么)。

正如我所说,我希望能够从 VC 调用此函数并获取/使用完成块来更新这些属性。我怎么做?

0 投票
2 回答
99 浏览

swift - 完成块不返回任何内容

我希望它返回字符串“我的名字是 Jacky”,但它没有。但是如果我将其更改isSuccess为:

然后它工作正常,这是为什么呢?提前致谢!

0 投票
2 回答
941 浏览

objective-c - 如何让一个方法在继续执行之前等待另一个(异步)方法完成?

我进行了很多搜索以了解其他人是如何解决这个问题的,但不幸的是,我没有找到这个特定问题的答案。我将衷心感谢您的帮助。

总结一下:我的类中有两个方法,method1 和method2。我必须在 method1 中调用一个异步函数。然后代码继续执行并到达method2。但是在方法 2 中,有些情况下我需要在方法 1 中使用该异步调用的结果,因此我需要确保方法 1 中的异步调用已经完成,然后再继续方法 2 的其余部分。

我知道一种方法是使用信号量,另一种方法是使用完成块。但我想以最通用的方式执行此操作,因为会有其他方法,类似于方法 2,它们将再次需要等待方法 1 中的异步调用完成才能继续执行。同样出于同样的原因,我不能简单地在 method2 本身内部调用 async 函数并将其余的 method2 放在其完成块中。

这是我想要做的一个粗略的想法。如果有人将完成块添加到这个伪代码中,我将不胜感激,这样我就可以清楚地看到事情是如何工作的。顺便说一句,method1 和 method2(以及此类中的所有其他方法)在同一个线程上(但不是主线程)。

更新:我知道我可以在异步调用完成后发出信号量,并且我可以在方法 2 中等待相同的信号量,但我想改用完成块,因为我认为这会更通用,特别是如果有其他类似的方法此类中的方法2。有人可以将完成块添加到此代码中,因为我在使其工作时遇到问题吗?