swiftui - 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
它的表情和以前一样清晰。如何修复代码以满足类型检查器的要求?
解决方案
发生此错误是因为多语句闭包不参与类型推断。无法推断初始化程序的Content
泛型参数,因为您提供给它的唯一信息,闭包,不考虑类型推断!GeometryReader
因此,您只需要指定要返回的类型:
.background(GeometryReader {
p -> Rectangle in // note here
print("Hello")
return Rectangle()
})
不过,您可能不应该这样做,因为您应该只将View
s 放入视图构建器闭包中。SwiftUI 被设计为非常具有声明性,几乎是它自己的 DSL,我想说。
编辑:我找到了这个答案,它添加了一个View
被调用的Print
. 我想您可以将其中一个放在您设置背景的任何视图旁边,在Group
.
推荐阅读
- python - Pandas groupby 的计数大于 1
- python - 如何在没有任何内置函数的情况下将矩阵乘以 python 中的向量,其中向量和矩阵都是用户的输入
- junit - 如何修复 Kafka 的 JUnit 依赖问题?
- visual-studio - 删除包并重建后找不到程序集?
- bash - 如何将 VAR 从子脚本传递到父脚本运行循环
- java - 从 JVM 中的内存不足异常中恢复并在可能的情况下重置 JVM
- java - WebView 中的视频仅在第一次会话中有效
- for-loop - 如何使用 Ansible 从变量访问标准输出
- c++ - cartToPolar 返回的不同角度不够
- python - 如何结束这个while循环,因为它一直在重复,直到我得到一个列表索引错误