Swift:如何通过引用从完成处理程序(闭​​包)存储一个对象数组?

时间:2017-03-25 17:05:29

标签: ios arrays swift asynchronous closures

有一个API回调返回一个Json格式的结果。简而言之,我需要继续调用此API并在其返回的结果上保持实现广度优先搜索。

成像它是一个包含许多节点和连接的地图。每次我调用一个节点的API调用时,它都会返回我连接节点的列表。我现在需要的只是一个数组,它可以保存已访问过的所有节点,以避免重复访问。

但这是Swift,我是新手。我正在使用Array并在完成处理程序中传递inout。但是有一个错误:escaping closures can only capture inout parameters explicitly by value这意味着我不能这样做。

现在您可能会问为什么我必须通过引用存储我的数组。因为API调用是异步的,这意味着我必须等到它继续进行广度优先搜索,这意味着我必须通过引用传递这个数组才能进行递归。

我可能有哪些其他解决方案?

1 个答案:

答案 0 :(得分:0)

Swift Arrays是值类型(不是引用类型),因此您需要将数组存储在对象中。然后,您可以将对象传递给处理程序,并在对象内部设置数组内容,该对象作为闭包中的引用。