swift - 在单独的类 Swift 中委托
问题描述
我想在单独的类中创建一个代表,例如:
class MapViewAnnotationDelegate: NSObject, SomeDelegate { //...}
然后在我的控制器中我想分配:
someView.delegate = MapViewAnnotationDelegate()
但是代表是零……如何达到这样的效果?我在 Objective-C 中读过一些关于 strong 的内容,但据我所知,strong 在 Swift 中是默认的。
解决方案
你所做的很好,但你需要一些东西来保存你的实例。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
}
}
在此配置中,Owner
(它是 的所有者someView
)在其生命周期内保留委托。
推荐阅读
- python - 图像未在烧瓶上渲染 - 图像损坏 - 图片保存在静态/图像中
- javascript - React-Router-Dom:页面内容不显示
- javascript - Webpack - Typescript - Babel Loader 不转译 JSON 导入
- javascript - 动态应用 Mixin 的问题 - A-FRAME
- django - Django formtools 用户注册密码
- javascript - 找到总和最大的递增子序列
- c# - 我们可以在 Angular 中调用 C# resx 进行本地化吗?
- python - 如何解决大量的 MAE & MSE?
- azure-application-insights - 使用 Python SDK 和 CLI 客户端凭据查询 Azure Application Insights API 时的 MissingApiVersionParameter
- powershell - 如何在类似于 test-netconnection 的终端内固定“移动”数据?