![](/img/trans.png)
[英]SwiftUI View starter code complains about `inheritance from non-protocol type 'View'` when added to an existing project
[英]inheritance from non-protocol type 'UIViewController' @objc protocol User: UIViewController
当我们向协议声明可选属性时,需要用@objc
属性对其进行标记。
该协议被限制为 UIViewController 类型的UIViewController
。
@objc protocol User: UIViewController {
@objc optional var userImage: UIImage {get set}
}
我收到以下错误。 如何将协议约束到UIViewController
并具有可选属性?
error: inheritance from non-protocol type 'UIViewController'
@objc protocol User: UIViewController {
将协议限制为某些类是 Swift 独有的功能,因此此处的@objc
声明与该限制不兼容。
其次,您可能希望将您的属性声明为可选( UIImage?
),因为这将符合要求的可选性。
如果您想要 Swift 中的可选属性,那么您可以为它们添加默认实现
protocol User: UIViewController {
var userImage: UIImage? { get set }
}
extension UIViewController {
var userImage: UIImage? {
get { nil }
set { /* do nothing */ }
}
但是,这将使您的 class 符合非 objc,因此您将无法从 Objective-C 使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.