Невозможно определить сложный тип возвращаемого значения закрытия с помощью оператора if let - PullRequest
1 голос
/ 14 июля 2020

Проблема : Невозможно обработать nil при разворачивании необязательного объекта, поэтому я решил использовать оператор if let, потому что получаю ошибку в заголовке.

Цель : Я хотел бы, чтобы foreach l oop пропускал создание объекта AnimatedImage, если urlString равен нулю.

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 Ответ

1 голос
/ 14 июля 2020

Оператор if let не разрешен в SwiftUI 1.0 (как и switch btw). Ваш случай можно решить с помощью частной вспомогательной функции view, как показано ниже (царапина, `потому что снимок не поддается проверке, но идея должна быть ясной)

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...