如何修复“'?:'表达式中的结果值类型不匹配”

时间:2019-07-28 13:44:55

标签: swift if-statement swiftui

我想根据稍后来自后端的值渲染两个不同的HStack

let list: [ReminderModel] = [ReminderModel(text: "Buy Bananas", closed: true), ReminderModel(text: "Meet John", closed: false), ReminderModel(text: "MMhh", closed: false), ReminderModel(text: "4", closed: false), ReminderModel(text: "5", closed: false), ReminderModel(text: "6", closed: false)]
var current: Int = 0

struct ReminderList: View {
    var body: some View {
        VStack() {
            list.count%3 == 2 ?
                HStack() {
                    Reminder(closed: list[list.count-2].closed, text: list[list.count-2].text)
                    Reminder(closed: list[list.count-1].closed, text: list[list.count-1].text)
                }
                : //Here is the error
                HStack() {
                    Reminder(closed: list[list.count-1].closed, text: list[list.count-1].text)
            }
        }
    }
}

错误:

  

“?”中的结果值:'表达式的类型不匹配   HStack<TupleView<(Reminder, Reminder)>>HStack<Reminder>

1 个答案:

答案 0 :(得分:1)

如您所见,这两个表达式产生不同的类型。与以下情况相同:

backend

let x = someCondition ? 1 : "abc" x还是Int? Swift具有静态类型系统,因此所有变量必须都具有在编译时已知的类型。然而,取决于String的值,直到运行时才知道这里的类型。在这种情况下,必须将类型设置为两种类型的超类型(协议或超类)。在这种情况下,一个示例超级类型是someCondition()。另一个可能的是CustomStringConvertible

在这种情况下,可以使用类型擦除器AnyView来包装两个参数,以提供一致的类型Any

一个更好的解决方案是使用if-else块。与条件运算符不同,SwiftUI视图功能构建器会将其转换为能够处理不同视图的结构。

AnyView