SwiftUI备用视图-协议类型“任何”不能符合“视图”,因为只有具体类型才能符合协议

时间:2020-01-02 05:40:06

标签: swift swiftui

我有两个可重用的视图,Ex1和Ex2。我试图证明其中一个交替地取决于条件,但我做不到。

ContentvIew:

struct ContentView: View {

    @State var selector = false
    var cvc = ContentViewController()

    var body: some View {
        ZStack { // ERROR: Protocol type 'Any' cannot conform to 'View' because only concrete types can conform to protocols

            cvc.getView(t: selector)

            Button(action: {
                self.selector.toggle()
                print(self.selector)
            }) {
                Text("Button")
            }
        }
        }
}

Ex1:

import SwiftUI

struct Ex1: View {
    var body: some View {
        Text("Ex 1")
    }
}

Ex2:

import SwiftUI

struct Ex2: View {
    var body: some View {
        Text("Ex 2")
    }
}

ContentViewController:

import Foundation

class ContentViewController {

    let a = Ex1()
    let b = Ex2()

    func getView (t: Bool) ->(Any){
        if t {
            return a
        }
        else {
            return b
        }
    }
}

我认为这很简单,但对我而言暂时不行。请帮两件事。

  1. 我想了解这个问题以及解决方法。

  2. 在布局中交替显示两个视图的最佳方法。

谢谢。

1 个答案:

答案 0 :(得分:0)

由于错误提示ContentViewController的{​​{1}}方法中指定的返回类型不符合协议。

在SwiftUI中,如果您不知道运行时可用的视图类型,则在getView子句中指定的所有内容都必须为body{}类型。

您可以为未知视图指定View类型。

因此,通过更改AnyView的代码将消除您的错误。

ContentViewController