我可以制作一个从“视图”继承来显示特定“视图”的协议吗?

时间:2019-07-12 14:06:52

标签: swift swift-protocols swiftui

我正在尝试制作一些具有类似属性的SwiftUI视图。因此,我想为其创建一个协议并显示该协议的实例。

protocol SpecialView: View { ... }

struct SpecialViewA : View, SpecialView {
    ...
    var body: some View {
        Text("Hello World!")
    }
}

struct ContentView: View {
    var currentlyDisplayedView: some SpecialView

    var body: some View{
        currentlyDisplayedView
    }

}

//in preview:
ContentView(SpecialViewA())

我希望ContentView接受我的SpecialViewA作为SpecialView。但是,在预览中 “无法将类型'SpecialViewA'的值转换为预期的参数类型'some SpecialView'”。 当尝试显示时,我得到: “ [...]要求'某些SpecialView'必须符合'View'”

我在做什么错?有没有更简单的方法?

1 个答案:

答案 0 :(得分:3)

您已经接近...,但这会编译:

from django.db.models import F

Team.objects.filter(
    mobateam__moba_tournament=some_tournament
).annotate(
    points=F('mobateam__points')
).order_by(
    '-points'
)