swift – 为类创建泛型委托

swift – 为类创建泛型委托,第1张

概述假设我的课程非常简单: class Box<T> { var boxedObject:T init(object: T) { self.boxedObject = object }} 我现在想要实现的是添加委托,它可以告诉我框中的值已经改变: protocol BoxDelegate<T>: class { func valueInBoxChanged(box: B 假设我的课程非常简单:

class Box<T> {  var Boxedobject:T  init(object: T) {    self.Boxedobject = object  }}

我现在想要实现的是添加委托,它可以告诉我框中的值已经改变:

protocol BoxDelegate<T>: class {    func valueInBoxChanged(Box: Box<T>) -> VoID}class Box<T> {    var Boxedobject: T {        dIDSet {            self.delegate?.valueInBoxChanged(self)        }    }    weak var delegate: BoxDelegate<T>?    init(object: T) {        self.Boxedobject = object    }}

此代码当然不起作用,因为我们没有通用委托.我可以使委托成为一个带闭包的结构,但它有点难看的解决方案.我应该如何在Swift中做这些事情?

解决方法 由于使用Swift的类型约束协议,您可能无法执行上面尝试执行的 *** 作.你可以做的是在设置委托时创建一个闭包并稍后调用闭包.

这将使您的案例在某种程度上更简单,

protocol BoxDelegate: class {    associatedtype T    func valueInBoxChanged(Box: Box<T>) -> VoID}class Box<T> {    var notifyClosure: (VoID -> VoID)?    var Boxedobject: T {        dIDSet {            self.notifyClosure?()        }    }    func setBoxDelegate<M where M:BoxDelegate,M.T == T>(delegate: M) {        notifyClosure = {            delegate.valueInBoxChanged(self)        }    }    init(object: T) {        self.Boxedobject = object    }}

因此,您不需要添加带有闭包的额外结构来使其工作.相反,您不会为BoxDelegate创建属性,而是创建一个方法来设置它并基于此创建一个闭包对象.

总结

以上是内存溢出为你收集整理的swift – 为类创建泛型委托全部内容,希望文章能够帮你解决swift – 为类创建泛型委托所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/999888.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存