Ios 完成处理程序与持有引用:最适合Swift中的这种情况?
我有以下场景:一个对象Ios 完成处理程序与持有引用:最适合Swift中的这种情况?,ios,swift,closures,completionhandler,Ios,Swift,Closures,Completionhandler,我有以下场景:一个对象A创建一个对象B,该对象应该根据用户的选择执行一些操作A是B的代表A不引用用户所做的选择(由另一个对象C表示),但它在创建B的方法中知道它,它需要知道当对象B完成其任务时选择了哪个选项,并通过调用A实现的相应协议方法来通知该选项 对于这个场景,我想到的第一个解决方案是在a中为选择C提供一个参考,并在B完成时调用的协议方法实现中访问它。但是,通过传递一个完成处理程序来处理这样的选择C,从而避免在a中保留一个引用直到B完成,可能会更好、更“快速” 您如何看待第二种解决方案(将闭
A
创建一个对象B
,该对象应该根据用户的选择执行一些操作A
是B
的代表A
不引用用户所做的选择(由另一个对象C
表示),但它在创建B
的方法中知道它,它需要知道当对象B
完成其任务时选择了哪个选项,并通过调用A
实现的相应协议方法来通知该选项
对于这个场景,我想到的第一个解决方案是在a
中为选择C
提供一个参考,并在B
完成时调用的协议方法实现中访问它。但是,通过传递一个完成处理程序来处理这样的选择C
,从而避免在a
中保留一个引用直到B
完成,可能会更好、更“快速”
您如何看待第二种解决方案(将闭包作为完成处理程序传递给B
)?它是否比第一种解决方案(在a
中保留引用)更合适
在这种情况下,我应该如何实现该解决方案?B
是否应该有一个将闭包称为完成处理程序的引用
编辑:我的场景的一些附加信息:
没有确切的属性A
,它将其推入导航控制器B
并不总是需要知道A
当C
完成时,它取决于请求B
B
只需知道A
一次C
(取决于B
执行的任务,如前所述)即可更新一些数据B
一次只需要知道一个A
(取决于C
执行的任务,如前所述)B
A
拥有B
,两个类都使用C
,您想知道C
应该归A
还是B
所有
您有3个基本选项:
A
和B
ownC
A
将C
保存到属性中,在初始化期间将其传递到B
,并且B
还将C
保存到属性中
A
拥有C
A
将C
保存到属性中,而根本不将其传递给B
B
在需要时使用委托方法请求它(a
用作B
的数据源)
B
拥有C
A
将C
直接传递到B
,B
使用公共getter将其保存到属性,当A
需要C
时,它从B
读取它
(请注意,您的想法是第三个选项的变体)
请注意,这三个选项都与快速性无关,这纯粹是一种架构选择,没有“最佳”解决方案。如果你想决定,你必须考虑你的应用程序的状态,例如:
B
被销毁之后,C
是否应该存在于A
中?如果是,请不要使用第三个选项A
是否同时处理多个B
或C
?那么就不要使用第二个选项C
是可变的还是不可变的?它是值类型还是类类型?如果是值类型,则不能使用第一个选项在我看来,第三种选择确实是最适合您的情况的解决方案。但是,正如我之前所说,没有一个“最佳”解决方案谢谢。也许我应该提供一些关于我的场景的更多细节,我将编辑我的问题。