swift - 如何指定将保存 SwiftUI 自定义视图的数组的类型信息
问题描述
我正在学习 SwiftUI,并且我知道要使用 SwiftUI 框架创建视图元素,您的自定义类型必须符合“视图”协议。我有一个要求,我想声明一个数组,该数组将包含我将通过创建一个实现“视图”协议的 Struct 来创建的自定义 SwiftUI 组件。现在我不确定要提到什么作为数组的类型,因为提供 'View' 作为类型会导致编译器错误,因为“ Protocol 'View' 只能用作通用约束,因为它具有 Self 或关联的类型要求”。
struct ContentView: View {
var tabs : [View]
var body: some View {
Text("Hello World")
}
}
解决方案
这是根据某些模型枚举生成不同视图的可能方法的演示。使用 Xcode 11.4 / iOS 13.4 测试
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)
}
}
}
}
}
推荐阅读
- angular - 是否可以通过邮件链接打开特定的应用程序页面?
- java - Java 开始使用 Netbeans
- reactjs - 来自 react-native-searchable-dropdown 的 React-native 组件 SearchableDropdown 不会触发 onItemSelect={(item) => {console.log(item)}}
- image - 如何在 Flutter 中选择和上传多个图像
- swift - 将 CollectionViewController 添加为子视图
- android - 如何从第二个活动中获取第一个活动中的信息
- algorithm - 给定特定顶点 v 的度数(v)=k 的最小生成树
- jquery - 我的 jquery 有效,但我希望先执行单击的列表项,然后执行上一个操作
- python - Pandas - 读取csv后将列转换为int的问题
- javascript - 使用 fetch POST 方法将文件发送到服务器 API