swift 如何将HStack应用于视图数组?

q8l4jmvw  于 2023-04-28  发布在  Swift
关注(0)|答案(2)|浏览(155)

我正在踢SwiftUI的轮胎,并希望制作一些HStack的功能版本。不过,我遇到了一个小问题。即错误:

Type 'any View' cannot conform to 'View'

产生此错误的最小示例:

import Foundation
import SwiftUI

func row(_ views: Array<any View>) -> some View {
    HStack() {
        ForEach(0..<views.count) {
            views[$0]    // the error is here
        }
    }
}

我应该做什么来修复示例?

wooyq4lh

wooyq4lh1#

你可以让row在一个具体类型上成为泛型,如下所示:

func row<Content>(_ views: [Content]) -> some View where Content: View {
    HStack() {
        ForEach(Array(0 ..< views.count), id: \.self) {
            views[$0]
        }
    }
}
qxsslcnc

qxsslcnc2#

受Gereon回答的启发,下面的内容实现了使用不同类型的视图(例如

row(Text("Hello"), Image(systemName: "globe"))

如何延续这种模式是显而易见的。
它没有正确地回答问题。数组,但它足够接近我的目的。
我想看看Layout,看看定制布局是否可以解决数组问题。

func row<A>(_ view1: A) -> some View
where A: View {
    HStack { view1 }
}
func row<A, B>(_ view1: A, _ view2: B) -> some View
where A: View, B : View {
         HStack { view1; view2 }
}
func row<A, B, C>(_ view1: A, _ view2: B, _ view3: C) -> some View
where A: View, B : View, C : View {
    HStack { view1; view2; view3}
}

相关问题