SwiftUI:为什么我不能在 PreviewProvider 的预览中映射视图?

SwiftUI: why can't I map views in a previews in PreviewProvider?

我知道这样做可以显示多个预览:

struct TestView: View {
    let number: Int
    
    var body: some View {
        ZStack {
            Color.orange
            Text("\(number)")
                .fontWeight(.heavy)
                .font(.system(size: 56.0))
        }
        .frame(width: 100, height: 100, alignment: .center)
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView(number: 3)
        TestView(number: 5)
    }
}

但为什么我不能改写这个呢?

static var previews: some View {
    [3, 5].map { TestView(number: [=11=]) }
}

(我收到此错误:Return 类型的静态 属性 'previews' 要求“[TestView]”符合 'View')

感谢您的帮助

[TestView],又称为Array<TestView>,不符合View.

SwiftUI 的解决方案是 ForEach 视图:

static var previews: some View {
    ForEach([3, 5], id: \.self) {
        TestView(number: [=10=])
    }
}

请注意,这假定数组中的每个元素都是唯一的(在本例中也是如此)。

因为它的 return 类型是 TestView 的数组,而数组不符合视图。

你可以这样做:

static var previews: some View {
    Group {
        let numbers = [3, 5]
        ForEach(numbers, id: \.self) { number in
            TestView(number: number)
        }
    }
}