【发布时间】:2019-06-29 09:28:47
【问题描述】:
在我的应用程序中,我有多个依赖于模型的 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 过程更加干净。感谢您的帮助!
【问题讨论】:
-
嘿@matt,谢谢你的回复。我已经更新了代码以更清晰。另外,我将 TextItem 更改为结构而不是协议。在我的应用程序中,我可以创建标签、图像。贴纸等'。它们中的每一个都是使用不同的模型构建的。但是所有模型都有一个超类模型,它们共享共同的属性。当我向 UIView 子类添加模型时,假设是标签。我想指定该对象从 TextModel 获取他的数据(这就是我将 storyItem 类更改为 TextItem 的原因。
-
@matt 现在,例如,当我创建标签对象时,我正在创建 TextItem 并将其分配给 storyItem (最底层的代码行),并且每次我想访问它,我需要强制转换它,我试图避免这种情况
标签: ios swift inheritance protocols subclass