&引用;函数声明不透明的返回类型[…]”;在SwiftUI中将视图声明为视图主体内的变量时出错
假设我有一个&引用;函数声明不透明的返回类型[…]”;在SwiftUI中将视图声明为视图主体内的变量时出错,swift,swiftui,Swift,Swiftui,假设我有一个视图,其图像具有阴影属性: struct ContentView: View { var body: some View { Image("turtlerock").shadow(radius: 10) } } 现在假设我想要访问阴影半径的值。我想我可以做到这一点: struct ContentView: View { var body: some View { let myImage = Image("turtlerock"
视图
,其图像
具有阴影
属性:
struct ContentView: View {
var body: some View {
Image("turtlerock").shadow(radius: 10)
}
}
现在假设我想要访问阴影半径的值。我想我可以做到这一点:
struct ContentView: View {
var body: some View {
let myImage = Image("turtlerock").shadow(radius: 10)
print(myImage.modifier.radius)
}
}
但是,这将返回一个错误:
函数声明了一个不透明的返回类型,但在其主体中没有可以推断基础类型的返回语句
有什么方法可以做到这一点吗?在修改和构建视图时,不需要返回语句,也不需要构建块,而不需要逗号。这称为多语句闭包。当您尝试在多语句闭包中创建变量时,编译器会抱怨,因为类型不匹配(您只能逐个组合视图,仅此而已)。有关更多详细信息,请参阅此答案: 解决此问题的一种方法是显式返回要组合的视图,因此不使用multi-closure语句:
struct MyView: View {
var body: some View {
let image = Image("Some image").shadow(radius: 10)
let myRadius = image.modifier.radius
// Do something with myRadius
return image // No multi closure statements.
}
}
您可以在主体外部定义图像:
let myImage = Image("turtlerock").shadow(radius: 10)
var body: some View {
myImage
}
要打印半径,您可以这样做:
var body: some View {
myImage
.tapAction {
print(self.myImage.modifier.radius) // 10.0
}
}
如果要引用的视图位于堆栈内部,则应在堆栈外部声明它,如下所示:
var body: some View {
let myImage = Image("image").shadow(radius: 10)
let stack = HStack {
myImage
Image("image2")
}
return stack
}
当它发生在我的测试环境中时,我只是将所有东西都嵌套在一个
return ZStack{ ...}
有点快,有点脏,但它对我的目的有效。我正在使用
组{}
:
func makeContentView()->一些视图{
团体{
如果这里有某种情况{
文本(“你好,世界”)
.foregroundColor(.red)
.font(.system(大小:13,重量:粗体,设计:等距))
}否则{
矩形()
.填充(颜色.灰色20)
}
}
}
}
这个答案也是正确的print(self.myImage.modifier.radius)//10.0
为什么要投反对票?@PrashantTukadiya我把这个答案投了赞成票,其他人把它投了反对票。非常感谢,你已经解释清楚了!我编辑了我的原始问题,只解决了一个问题,我将创建第二个问题,处理访问修饰符变量的问题。我建议编辑此答案,只包含下半部分,并在另一个问题的答案中包含有关访问修饰符的信息。下面是另一个问题: