我想在一个单独的类中创建一个委托,如:
class MapViewAnnotationDelegate: NSObject, SomeDelegate { //...}
然后在我的控制器中我想分配:
someView.delegate = MapViewAnnotationDelegate()
但代表是零...如何实现这样的效果?我在Objective-C中读到了一些关于强大的内容,但据我所知,Swift中的强项是默认的。
答案 0 :(得分:1)
你正在做的事情很好,但你需要一些东西来保持你的实例。传统的delegate
属性为weak
,因此它们无法确保保留对象。其他东西必须保留它。最常见的解决方案是向拥有someView
的类添加属性,并在将其指定为委托之前将MapViewAnnotationDelegate
分配给该属性。这样,只要包含对象存在,它就不会被解除分配。但任何保留它的东西都可以。
您当前的代码目前执行此操作:
这可能是这样的一种方式:
class Owner {
let mapViewAnnotationDelegate = MapViewAnnotationDelegate()
let someView: ...
init() {
someView.delegate = mapViewAnnotationDelegate
}
}
在此配置中,Owner
(someView
的所有者)保留代理人的生命周期。