Я пытаюсь установить фон с изображением, и если нет изображения по умолчанию для градиента, дело в том, что я не нашел способ поместить if в декларативную часть SwiftUI, и я не могу использовать функция, так как изображение не соответствует представлению. У кого-нибудь есть решение установить условно фон для изображения и, если не возможно, установить его в цвет?
struct ReminderView: View {
var reminder: Reminder
var bgImage: Image? {
if let data = reminder.image, let image = UIImage(data: data) {
return Image(uiImage: image).resizable()
}
return nil
}
var bg: LinearGradient {
return LinearGradient(gradient: Gradient(colors: [
Color(.sRGB, red: 38 / 255, green: 63 / 255, blue: 159 / 255, opacity: 1),
Color(.sRGB, red: 174 / 255, green: 77 / 255, blue: 1, opacity: 1)]),
startPoint: UnitPoint(x: 0, y: 1), endPoint: UnitPoint(x: 1, y: 0))
}
var body: some View {
GeometryReader { (geometry) in
VStack(alignment: .center, spacing: 0) {
Group {
Spacer()
Spacer()
}.shadow(color: .gray, radius: 5, x: 0, y: 0)
}.frame(width: geometry.size.width,
height: geometry.size.width / CGFloat(Card.aspectRatio))
.background((self.bgImage != nil) ? self.bgImage! : self.bg)
.cornerRadius(10)
.shadow(radius: 10)
}
}
}
Дело в том, что я тоже это пробовал и не работает:
var bgImage: some View {
if let data = reminder.image, let image = UIImage(data: data) {
return Image(uiImage: image).resizable()
}
return LinearGradient(gradient: Gradient(colors: [
Color(.sRGB, red: 38 / 255, green: 63 / 255, blue: 159 / 255, opacity: 1),
Color(.sRGB, red: 174 / 255, green: 77 / 255, blue: 1, opacity: 1)]),
startPoint: UnitPoint(x: 0, y: 1), endPoint: UnitPoint(x: 1, y: 0))
}
Он говорит: функция объявляет непрозрачный тип возвращаемого значения, но операторы return в его теле делают не соответствует ...