如何将 SwiftUI View 作为函数参数传递?

How to pass SwiftUI View as function parameter?

我想将 SwiftUI Views 显示为 UIViewController 的子视图。这些视图必须实现一个协议。

我有这个:

protocol ContentViewProtocol : View
{
    var values: [CGFloat] { get }
}

...

import SwiftUI

struct SearchContentView : ContentViewProtocol
{
    var values: [CGFloat] = [0.5, 0.7]

    var body: some View
    {
        VStack
        {
            ...
        }
    }
}

...

func showContent(view: ContentViewProtocol) <=== ERROR
{
    var child = UIHostingController(rootView: view) <=== SAME ERROR

    ...
}

我收到以下错误:Protocol 'ContentViewProtocol' can only be used as a generic constraint because it has Self or associated type requirements

我在使用普通的 View 作为函数参数类型时遇到同样的错误(因此使用 func showContent(view: View))。

我怎样才能避免这种情况?

您可以按照错误提示进行操作,并使用 ContentViewProtocol 作为通用约束。使 showContent 通用:

func showContent<V: ContentViewProtocol>(view: V)
{
    let child = UIHostingController(rootView: view)
    ...
}