我在使用具有關聯型別的委托協議時遇到了一些問題。目前,我的實作如下所示:
protocol Delegate: AnyObject {
associatedtype Foo
func doSomething(with bar: Bar<Self>) -> Foo
}
class Bar<T: Delegate> {
weak var delegate: T?
func makeFoo() -> T.Foo? {
return delegate?.doSomething(with: self)
}
}
雖然這可行,但 的約束會Bar<Self>阻止委托成為非final類。我想說這樣的話:
protocol Delegate: AnyObject {
associatedtype Foo
func doSomething<T: Delegate>(with bar: Bar<T>) -> Foo
where Self: T
}
但是,即使T限制為AnyObject,它也會給我錯誤:
Type 'Self' constrained to non-protocol, non-class type 'T'
是否有任何型別安全的方式允許委托屬于非final類?
uj5u.com熱心網友回復:
我設法做到了:
func doSomething<T: Delegate>(with bar: Bar<T>) -> Foo where T.Foo == Foo
似乎 usingT: Self在這里不起作用,您必須為相等的關聯型別添加條件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/436438.html
標籤:迅速
