从非协议类型继承 'UIViewController' @objc 协议用户:UIViewController
inheritance from non-protocol type 'UIViewController' @objc protocol User: UIViewController
当我们向协议声明一个可选的 属性 时,它需要用 @objc
属性标记。
协议被限制为 UIViewController
类型的 class。
@objc protocol User: UIViewController {
@objc optional var userImage: UIImage {get set}
}
我收到以下错误。我怎样才能将协议约束到 UIViewController
并具有可选的 属性?
error: inheritance from non-protocol type 'UIViewController'
@objc protocol User: UIViewController {
将协议限制为某些 classes 是 Swift 独有的功能,因此此处的 @objc
声明与该限制不兼容。
其次,您可能希望将您 属性 声明为可选 (UIImage?
),因为这将符合要求的可选性。
如果您想要 Swift 中的可选属性,则可以为它们添加默认实现
protocol User: UIViewController {
var userImage: UIImage? { get set }
}
extension UIViewController {
var userImage: UIImage? {
get { nil }
set { /* do nothing */ }
}
然而,这将使您的 class conformers 成为非 objc,因此您将无法在 Objective-C.
中使用它们
当我们向协议声明一个可选的 属性 时,它需要用 @objc
属性标记。
协议被限制为 UIViewController
类型的 class。
@objc protocol User: UIViewController {
@objc optional var userImage: UIImage {get set}
}
我收到以下错误。我怎样才能将协议约束到 UIViewController
并具有可选的 属性?
error: inheritance from non-protocol type 'UIViewController'
@objc protocol User: UIViewController {
将协议限制为某些 classes 是 Swift 独有的功能,因此此处的 @objc
声明与该限制不兼容。
其次,您可能希望将您 属性 声明为可选 (UIImage?
),因为这将符合要求的可选性。
如果您想要 Swift 中的可选属性,则可以为它们添加默认实现
protocol User: UIViewController {
var userImage: UIImage? { get set }
}
extension UIViewController {
var userImage: UIImage? {
get { nil }
set { /* do nothing */ }
}
然而,这将使您的 class conformers 成为非 objc,因此您将无法在 Objective-C.
中使用它们