Swift:动态创建和分配代理
MKMapView的委托属性在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
@IBOutlet weak open var delegate: MKMapViewDelegate?.
如果我必须为长度/计数未知的数组中的每个项动态创建映射视图,那么我如何为每个映射动态分配一个唯一的委托实例,而不为每个委托保留一个类变量(因为我们不知道数组中的项数)。有没有类似于Obj-C的\u\u Strong
更新:
我可以将每个委托添加到一个类数组中,但是,如果Swift中有这样的方法,是否还有其他更内联的方法,例如使用_Strong
如何动态地为每个映射分配一个唯一的委托实例,而不为每个委托保留一个类变量
每个地图视图不需要唯一的委托对象。委托方法通常会将对委托人的引用作为其第一个参数,因此委托人可以轻松地判断哪个映射视图正在发送消息。“堆栈上的其他答案建议保留一个类变量作为委托的强引用。这是我想要避免的解决方案…”-您可能想要避免,但这是正确的答案。由于地图视图只保留对其
委托的弱引用
,如果您不想将其解除分配,则必须在某个位置建立自己对该对象的强引用。而且,不,使用局部变量显然是行不通的(即使它恰好使警告静音)。@rob,示例情况如何。你将如何处理这个问题。在这种情况下,您不能保留类委托变量。正如您在更新中所说,您可以拥有这些委托对象的数组。@Rob,对。我懂了。我想我先查一下。希望将来我们可以得到类似于__; Strong的内联弱委托保留。不,没有。很抱歉我们真的应该删除/关闭这个问题…很好。如果代理必须为其处理的地图保留某些信息,该怎么办。例如,保留一个变量,该变量保存用户上次滚动它的日期和时间。在这种情况下,每个映射需要一个唯一的委托。。。不过这一点很好。关于我刚才提到的情况,可以将该属性添加到map子类中,并在一个委托中使用该属性。回到你的观点。绝对正确。否则,代理可以将信息存储在字典中,其中地图视图是键,最后一次滚动的日期是值。