当我们为协议声明一个可选属性时,它需要用 @objc
属性标记。
协议被限制为类型为 UIViewController
的类。
@objc protocol User: UIViewController {
@objc optional var userImage: UIImage {get set}
}
我收到以下错误。如何将协议约束到 UIViewController
并附带可选属性?
error: inheritance from non-protocol type 'UIViewController'
@objc protocol User: UIViewController {
答案 0 :(得分:1)
将协议限制为某些类是 Swift 独有的功能,因此此处的 @objc
声明与该限制不兼容。
其次,您可能希望将您的属性声明为可选 (UIImage?
),因为这将匹配要求的可选性。
如果你想要 Swift 中的可选属性,那么你可以为它们添加默认实现
protocol User: UIViewController {
var userImage: UIImage? { get set }
}
extension UIViewController {
var userImage: UIImage? {
get { nil }
set { /* do nothing */ }
}
然而,这将使您的类符合者非 objc,因此您将无法从 Objective-C 中使用它们。