首页 > 解决方案 > 无法将 [Type] 类型的值转换为预期的参数类型“某些视图”

问题描述

我有以下结构:

struct A : View {

    var backgroundView: some View = Color.white

    var body = some View {
        VStack {
            Text("abc")
        }
        .background(backgroundView)
    }

}

只要我没有指定我自己的,这在预览中可以正常工作backgroundView

struct A_Previews: PreviewProvider {
    static var previews: some View {
        A()
    }
}

但是当我将 backgroundView 指定为例如 LinearGradient 时:

struct A_Previews: PreviewProvider {
    static var previews: some View {
        A(backgroundView: LinearGradient(
             gradient: Gradient(colors: [.yellow, .white]),
             startPoint: .bottom,
             endPoint: .top))
    }
}

我收到以下错误:

无法将“LinearGradient”类型的值转换为预期的参数类型“某些视图”

为什么默认实现有效而自定义声明为什么无效?如何设置一个可以同时接受 Color 和 LinearGradient 类型的参数?

标签: iosswiftswiftui

解决方案


解决的最佳方法是使用AnyView和包装其中的值:基于这篇文章:https ://www.hackingwithswift.com/quick-start/swiftui/how-to-return-different-view-types

struct A : View {

    var backgroundView: AnyView = AnyView(Color.white)

    var body = some View {
        VStack {
            Text("abc")
        }
        .background(backgroundView)
    }

}

接着:

struct A_Previews: PreviewProvider {
    static var previews: some View {
        A(backgroundView: AnyView(LinearGradient(
             gradient: Gradient(colors: [.yellow, .white]),
             startPoint: .bottom,
             endPoint: .top)))
    }
}

推荐阅读