swift - Swift,两次实现相同的委托(没有多播)
问题描述
给定一个非常简单的协议:
protocol TheProtocol {
func doSomething()
func doSomethingElse()
func doThis()
func doThat()
}
我有一个Base
有一个代表等待设置的类。
// Can't modify this class at all
class Base {
public var delegate: TheProtocol?
}
我的第二个类B
继承自此类Base
,并实现TheProtocol
以将委托设置为自身。
class B: Base, TheProtocol {
override init() {
super.init()
self.delegate = self
}
func doSomething() {
}
func doSomethingElse() {
}
... other methods to implement
}
现在我想要做的是拥有一个C
包含 的实例的最后一个类,B
并设置委托。我希望代表在内部B
和C
.
主要的限制是我不能修改Base
类。
class C: TheProtocol {
var obj = B()
init() {
// If I do this it won't fire within B anymore
obj.delegate = self
}
func doSomething() {
}
func doSomethingElse() {
}
... other methods to implement
}
解决方案
实际上可以使用代理委托。不过真的不推荐。
推荐阅读
- rust - 如何借用对本身位于选项内的 RefCell 内的东西的引用?
- javascript - 提交按钮冻结 chrome、safari 和 firefox 的不同行为
- php - 如何删除不存在的带有图像和mysql记录新闻的文件夹
- javascript - 分页无法正常工作 - Ngx-pagination
- java - 编写一个方法来读取包含 Int 和字符串的文件到 arraylist
- keras - 在 Keras 中加载模型后损失函数大幅增加,自定义数据,繁重的 agumentation
- unit-testing - 为每个函数编写单元测试与只为服务编写 API 测试相比有什么优势
- sql - Oracle表中基于条件的随机记录
- c# - 有没有办法使用 [FromBody] 属性进行嵌套模型绑定?
- r - 理解 R 中的马尔可夫链源代码