如何指定包含SwiftUI自定义视图的数组的类型信息
我正在学习SwiftUI,我知道要使用SwiftUI框架创建视图元素,您的自定义类型必须符合“视图”协议。我有一个要求,我想声明一个数组,其中包含我将通过创建一个实现“视图”协议的结构来创建的自定义SwiftUI组件。现在我不确定数组的类型应该提到什么,因为提供“视图”作为类型会导致编译器错误为“协议“视图”只能用作一般约束,因为它具有自身或关联的类型要求。”如何指定包含SwiftUI自定义视图的数组的类型信息,swift,swiftui,Swift,Swiftui,我正在学习SwiftUI,我知道要使用SwiftUI框架创建视图元素,您的自定义类型必须符合“视图”协议。我有一个要求,我想声明一个数组,其中包含我将通过创建一个实现“视图”协议的结构来创建的自定义SwiftUI组件。现在我不确定数组的类型应该提到什么,因为提供“视图”作为类型会导致编译器错误为“协议“视图”只能用作一般约束,因为它具有自身或关联的类型要求。” 下面是根据一些模型枚举生成不同视图的可能方法的演示。使用Xcode 11.4/iOS 13.4进行测试 enum customtabd
下面是根据一些模型枚举生成不同视图的可能方法的演示。使用Xcode 11.4/iOS 13.4进行测试
enum customtabdescriptor:Int{
案例一=1
案例二=2
案例三=3
变量标签:字符串{
“\(self.rawValue).square”
}
//也可以用于具有要在内部传递的参数的函数
//创建了相应的视图
var视图:一些视图{
团体{
如果self=.1{
Text(“One”)//这不是快速的方向…尝试使用数组代替模型(或视图模型)对象并根据它们在主体中创建相应的视图。看一看苹果的教程:为什么要在另一个视图上存储视图数组?您要实现的是什么?非常感谢您的回答。我试图构建一个自定义选项卡视图,以便能够动态传入一些参数构建选项卡栏。我是根据使用UITabBarController构建类似内容的经验来解决此问题的。这就是为什么要使用包含视图组件的数组。您的代码在SwiftUI中为我提供了正确的方法。谢谢!!。编译器错误与使用“具有关联类型的协议”作为类型有关这不是特定于SwiftUI的。
struct ContentView: View {
var tabs : [View]
var body: some View {
Text("Hello World")
}
}
enum CustomTabDescriptior: Int {
case one = 1
case two = 2
case three = 3
var label: String {
"\(self.rawValue).square"
}
// can be used also a function with arguments to be passed inside
// created corresponding views
var view: some View {
Group {
if self == .one {
Text("One") // << any custom view here or below
}
if self == .two {
Image(systemName: "2.square")
}
if self == .three {
Button("Three") {
print(">> activated !!")
}
}
}
}
}
struct DemoDynamicTabView: View {
let tabs: [CustomTabDescriptior] = [.one, .two, .three]
var body: some View {
TabView {
ForEach(tabs, id: \.self) { tab in
tab.view
.tabItem {
Image(systemName: tab.label)
}
}
}
}
}