数组中有很多不同类型的元素,我想让它们都知道如何呈现自己.这是相当复杂的,我总是增加新的类型-不想每次都要做猎枪手术
但似乎无法计算出具有不透明类型返回的函数的继承语法--如果我这样做的话:
class Element
{
func forDisplay() -> some View
{ fatalError("this function needs to be overridden")}
}然后尝试覆盖它
class TextElement : Element
{
...
override func forDisplay() -> some View
{ return Text( self.textValue ) };
}它给了我一个编译错误-如果我忽略了这个单词重写
class TextElement : Element
{
...
func forDisplay() -> some View
{ return Text( self.textValue ) };
}它编译良好,运行良好,但随后调用基础错误函数。
发布于 2022-02-28 06:33:20
不能覆盖不透明类型。最好不要把任何东西子类化,真的。这是最后的手段。我敢打赌,您甚至不想要一个引用类型,而且您只选择了一个类,因为继承,认为它可以很好地建模您的解决方案。不管…
也许您需要一个具有关联类型的协议,如建议的那样,或者您只是想要一个通用的Element<View: SwiftUI.View>。这些问题是,您将无法限制扩展,因为您将不知道什么是不透明的Views。所以我想你会在幻影类型上有更多的运气。
protocol HeadingTag { }
enum H1: HeadingTag { }
enum H2: HeadingTag { }
enum H3: HeadingTag { }class Element<Tag> {extension Element where Tag: HeadingTag {
func forDisplay() -> some View {
Text(textValue)
}
}extension Element where Tag == H2 {
func forDisplay() -> some View {
// An H2-specific viewhttps://stackoverflow.com/questions/71288674
复制相似问题