在单独的Swift类中委派

时间:2018-05-09 13:45:02

标签: swift class delegates

我想在一个单独的类中创建一个委托,如:

class MapViewAnnotationDelegate: NSObject, SomeDelegate { //...}

然后在我的控制器中我想分配:

someView.delegate = MapViewAnnotationDelegate()

但代表是零...如何实现这样的效果?我在Objective-C中读到了一些关于强大的内容,但据我所知,Swift中的强项是默认的。

1 个答案:

答案 0 :(得分:1)

你正在做的事情很好,但你需要一些东西来保持你的实例。传统的delegate属性为weak,因此它们无法确保保留对象。其他东西必须保留它。最常见的解决方案是向拥有someView的类添加属性,并在将其指定为委托之前将MapViewAnnotationDelegate分配给该属性。这样,只要包含对象存在,它就不会被解除分配。但任何保留它的东西都可以。

您当前的代码目前执行此操作:

  • 创建MapViewAnnotationDelegate
  • 将其分配给someView.delegate
  • 请注意,没有对MapViewAnnotationDelegate的强引用(因为someView.delegate是一个弱引用)
  • 销毁MapViewAnnotationDelegate
  • 将someView.delegate设置为nil

这可能是这样的一种方式:

class Owner {
    let mapViewAnnotationDelegate = MapViewAnnotationDelegate()

    let someView: ...

    init() {
        someView.delegate = mapViewAnnotationDelegate
    }
}

在此配置中,OwnersomeView的所有者)保留代理人的生命周期。