无法使用if let语句推断复杂的闭包返回类型

时间:2020-07-14 18:28:35

标签: arrays swiftui conditional-statements

问题:解开Optional时无法处理nil,因此我决定使用if let语句,因为我收到标题错误。

目标:如果urlString为nil,我希望让foreach循环跳过生成AnimatedImage对象的过程。

HStack {
            ForEach(0..<3, id: \.self) { column in
                if let post = self.observed.posts[safe: (row * 3 + column)] {
                    AnimatedImage(url: URL(string: post.image)).resizable().frame(width: self.width, height: self.width)
                }
                
            }
        }

我创建了一个扩展程序来处理导致错误的数组错误。

1 个答案:

答案 0 :(得分:1)

在SwiftUI 1.0(以及if let btw)中不允许使用switch语句。您的案例可以通过查看私有帮助器函数来解决,如下所示(草率的,`原因是不可测试的,但思路应明确)

private func image(in column: Int) -> some View {
    let post = self.observed.posts[safe: (row * 3 + column)]
    return Group {
       if post != nil {
          AnimatedImage(url: URL(string: post.image))
             .resizable().frame(width: self.width, height: self.width)
       }
    }
}

现在进入

ForEach(0..<3, id: \.self) { column in
    self.image(for: column)
}