ios - 无法将 [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 类型的参数?
解决方案
解决的最佳方法是使用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)))
}
}
推荐阅读
- flutter - 我们可以在 Flutter 中的 Razorpay 中实现自定义结帐屏幕吗
- docker - Alpine:不可满足的约束
- r - 通过躲避在R中的ggplot中绘制年度/面积比较
- javascript - 应用程序函数从 React Native 中的异步操作中不返回任何内容
- android - PhoneStateListener 没有给出拨打/呼叫的号码
- php - 间隔日期之间的php总和数据
- java - 如何在排序链表的开头插入一个节点?
- javascript - 解码 javascript 发送到 python 的 base64 字符串
- angular - 错误中的错误:方法未在 Angular 应用程序中实现
- javascript - 如何在 Express 路由器中动态创建参数?