从非协议类型 'UIViewController' 继承@objc 协议用户:UIViewController

时间:2021-05-27 21:32:19

标签: ios swift swift-protocols

当我们为协议声明一个可选属性时,它需要用 @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 {

1 个答案:

答案 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 中使用它们。