Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:动态创建和分配代理_Swift_Delegates_Mkmapview_Weak References_Strong References - Fatal编程技术网

Swift:动态创建和分配代理

Swift:动态创建和分配代理,swift,delegates,mkmapview,weak-references,strong-references,Swift,Delegates,Mkmapview,Weak References,Strong References,MKMapView的委托属性在swift中定义为: @IBOutlet weak open var delegate: MKMapViewDelegate?. 如果我必须为长度/计数未知的数组中的每个项动态创建映射视图,那么我如何为每个映射动态分配一个唯一的委托实例,而不为每个委托保留一个类变量(因为我们不知道数组中的项数)。有没有类似于Obj-C的\u\u Strong 更新: 我可以将每个委托添加到一个类数组中,但是,如果Swift中有这样的方法,是否还有其他更内联的方法,例如使用_Str

MKMapView的委托属性在swift中定义为:

@IBOutlet weak open var delegate: MKMapViewDelegate?.
如果我必须为长度/计数未知的数组中的每个项动态创建映射视图,那么我如何为每个映射动态分配一个唯一的委托实例,而不为每个委托保留一个类变量(因为我们不知道数组中的项数)。有没有类似于Obj-C的
\u\u Strong

更新: 我可以将每个委托添加到一个类数组中,但是,如果Swift中有这样的方法,是否还有其他更内联的方法,例如使用_Strong

如何动态地为每个映射分配一个唯一的委托实例,而不为每个委托保留一个类变量


每个地图视图不需要唯一的委托对象。委托方法通常会将对委托人的引用作为其第一个参数,因此委托人可以轻松地判断哪个映射视图正在发送消息。

“堆栈上的其他答案建议保留一个类变量作为委托的强引用。这是我想要避免的解决方案…”-您可能想要避免,但这是正确的答案。由于地图视图只保留对其
委托的
弱引用
,如果您不想将其解除分配,则必须在某个位置建立自己对该对象的强引用。而且,不,使用局部变量显然是行不通的(即使它恰好使警告静音)。@rob,示例情况如何。你将如何处理这个问题。在这种情况下,您不能保留类委托变量。正如您在更新中所说,您可以拥有这些委托对象的数组。@Rob,对。我懂了。我想我先查一下。希望将来我们可以得到类似于__; Strong的内联弱委托保留。不,没有。很抱歉我们真的应该删除/关闭这个问题…很好。如果代理必须为其处理的地图保留某些信息,该怎么办。例如,保留一个变量,该变量保存用户上次滚动它的日期和时间。在这种情况下,每个映射需要一个唯一的委托。。。不过这一点很好。关于我刚才提到的情况,可以将该属性添加到map子类中,并在一个委托中使用该属性。回到你的观点。绝对正确。否则,代理可以将信息存储在字典中,其中地图视图是键,最后一次滚动的日期是值。