据我所知,你不能使用if let不可选的变量......
func run() {\n    let title = "Hello, world!"\n    if let title = title { /// Initializer for conditional binding must have Optional type, not \'String\'\n        print(title)\n    }\n}\n...但由于某种原因,当它位于闭包内时,它会起作用:
\nfunc run() {\n    let title = "Hello, world!"\n    let closure = {\n        if let title = title { /// No error!\n            print(title)\n        }\n    }\n    closure()\n}\n这是在 Xcode 14.0 beta (14A5228q) 上。这是一个错误,还是一个功能?当我在Xcode 13.3(13E113)上测试时,错误再次出现。
\n顺便说一句,以下 SwiftUI 代码在 Xcode 13 和 Xcode 14 上都可以正常编译:
\nstruct ContentView: View {\n    let title = "Hello, world!"\n\n    var body: some View {\n        VStack {\n            if let title = title { /// Works fine!\n                Text(title)\n            }\n        }\n    }\n}\n而且不仅仅是VStack\xe2\x80\x94 任何标记的东西@ViewBuilder似乎都有效。
struct ContentView: View {\n    let title = "Hello, world!"\n\n    var body: some View {\n        ContainerView {\n            if let title = title { /// works fine!\n                Text(title)\n            }\n        }\n    }\n}\n\nstruct ContainerView<Content: View>: View {\n    @ViewBuilder var content: Content\n    var body: some View {\n        content\n    }\n}\n这是已记录的功能还是错误?
\n该问题(与结果生成器有关)已在 Swift 5.8 中修复。据GitHub上的一位 Apple 工程师介绍:
这是 5.7 中的一个错误,之前已编译并影响编译时性能。我在论坛帖子中概述了这个问题 - https://forums.swift.org/t/improved-result-builder-implementation-in-swift-5-8/63192 “结构诊断”小节。
| 归档时间: | 
 | 
| 查看次数: | 468 次 | 
| 最近记录: |