首页 > 解决方案 > SwiftUI 闭包体中的语句导致类型错误

问题描述

SwiftUI 视图上的这个修饰符编译得很好:

.background(GeometryReader { p in
    return Rectangle().opacity(0)
})

(我知道我不需要返回,但我即将添加另一行。)

当我添加一个print调用时,它不再编译。

.background(GeometryReader { p in
    print("hi")
    return Rectangle().opacity(0)
})

错误指向background并说:

表达式类型 '(_, Alignment) -> some View' 在没有更多上下文的情况下是模棱两可的

我不明白为什么现在对传递给.background(...). return它的表情和以前一样清晰。如何修复代码以满足类型检查器的要求?

标签: swiftui

解决方案


发生此错误是因为多语句闭包不参与类型推断。无法推断初始化程序的Content泛型参数,因为您提供给它的唯一信息,闭包,不考虑类型推断!GeometryReader

因此,您只需要指定要返回的类型:

.background(GeometryReader {
    p -> Rectangle in // note here
    print("Hello")
    return Rectangle()
})

不过,您可能不应该这样做,因为您应该只将Views 放入视图构建器闭包中。SwiftUI 被设计为非常具有声明性,几乎是它自己的 DSL,我想说。

编辑:我找到了这个答案,它添加了一个View被调用的Print. 我想您可以将其中一个放在您设置背景的任何视图旁边,在Group.


推荐阅读