温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Statement in SwiftUI closure body causes type error
swiftui

其他 - SwiftUI闭包主体中的语句导致类型错误

发布于 2020-04-07 11:21:35

SwiftUI视图上的此修饰符可以正常编译:

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

(我知道我不需要退货,但是我要添加另一行。)

当我添加print呼叫时,它将不再编译。

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

错误指向,background并说:

表达式类型'(_,对齐方式->某些视图')含糊不清,没有更多上下文

我不明白为什么现在对传递给的东西的类型感到困惑.background(...)它具有与return以前相同的清晰表达。如何修复代码以满足类型检查器的要求?

查看更多

提问者
Rob N
被浏览
95
Sweeper 2020-02-01 02:00

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

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

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

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

编辑:我发现这个答案,还增加了一个ViewPrint我想您可以在其中设置背景的任何视图旁边放置其中之一Group