Swift 协议中的弱 属性 只能是 class 或 class 绑定协议类型
Weak property in a Swift protocol may only be a class or class-bound protocol type
我想定义一个在 Viper 架构中使用的协议,以使用具有弱 属性 的协议在 Viper 组件之间建立连接,但我收到以下错误消息:
'weak' may only be applied to class and class-bound protocol types,
not 'Self.ViperViewClass'
protocol ViperPresenter: class {
associatedtype ViperViewClass
weak var view: ViperViewClass! { get set }
}
协议目前不能要求将属性实现为 weak
存储属性。
虽然 weak
和 unowned
关键字目前在 属性 要求中是允许的,但它们没有任何作用。以下是完全合法的:
class C {}
protocol P {
weak var c: C? { get set }
}
struct S : P {
var c: C? // strong reference to a C instance, not weak.
}
这是 filed as a bug, and SE-0186 将根据协议中的 属性 要求使用 weak
和 unowned
Swift 4.1 中的警告(在两者中Swift 3 和 4 模式),以及 Swift 5.
中的错误
但即使协议 可能 要求将属性实现为 weak
或 unowned
存储属性,编译器也需要知道 ViperViewClass
是 class 类型(即说
associatedtype ViperViewClass : AnyObject
)。
我想定义一个在 Viper 架构中使用的协议,以使用具有弱 属性 的协议在 Viper 组件之间建立连接,但我收到以下错误消息:
'weak' may only be applied to class and class-bound protocol types, not 'Self.ViperViewClass'
protocol ViperPresenter: class {
associatedtype ViperViewClass
weak var view: ViperViewClass! { get set }
}
协议目前不能要求将属性实现为 weak
存储属性。
虽然 weak
和 unowned
关键字目前在 属性 要求中是允许的,但它们没有任何作用。以下是完全合法的:
class C {}
protocol P {
weak var c: C? { get set }
}
struct S : P {
var c: C? // strong reference to a C instance, not weak.
}
这是 filed as a bug, and SE-0186 将根据协议中的 属性 要求使用 weak
和 unowned
Swift 4.1 中的警告(在两者中Swift 3 和 4 模式),以及 Swift 5.
但即使协议 可能 要求将属性实现为 weak
或 unowned
存储属性,编译器也需要知道 ViperViewClass
是 class 类型(即说
associatedtype ViperViewClass : AnyObject
)。