繁体   English   中英

Swift 符合协议子类

[英]Swift conform to protocol subclass

在我的应用程序中,我有多个依赖于模型的 UIView 子类。 每个类都采用“ Restorable ”协议,该协议持有模型的超类。 每个子模型描述了特定的 UIView 不常见的属性。

// Super-model
public protocol StoryItem {
    var id: Int64? { get }
}

// Parent protocol
public protocol Restorable: AnyObject {
    var storyItem: StoryItem? { get set }
}

// Specific protocol
public struct TextItem: StoryItem {
    public var id: Int64?
    public var text: String?
}

// Not complling
class ResizableLabel: UILabel, Restorable {
    var storyItem: TextItem?
}

我收到以下编译器错误:

*Type 'ResizableLabel' does not conform to protocol 'Restorable'*

我可以编译它的唯一方法是将ResizableLabel更改为

// Works
class ResizableLabel: UILabel, Restorable {
    var storyItem: StoryItem?
}

有没有办法符合协议子类? 它将使 Init 过程更加干净。 感谢您的帮助!

改变

public protocol Restorable: AnyObject {
    var storyItem: StoryItem? { get set } // adopter must declare as StoryItem
}

public protocol Restorable: AnyObject {
    associatedtype T : StoryItem
    var storyItem: T? { get set } // adopter must declare as StoryItem adopter
}

现在您的代码可以编译了。 完整示例:

public protocol StoryItem {
    var id: Int64? { get }
}
public protocol Restorable: AnyObject {
    associatedtype T : StoryItem
    var storyItem: T? { get set }
}
public struct TextItem: StoryItem {
    public var id: Int64?
    public var text: String?
}
class ResizableLabel: UILabel, Restorable {
    var storyItem: TextItem? // ok because TextItem is a StoryItem adopter
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM