【发布时间】:2021-11-26 00:40:39
【问题描述】:
假设我有一些枚举,Channel,其中填充了示例属性数据:
enum Channel: CaseIterable {
case abc
case efg
case hij
var name: String {
switch self {
case .abc: return "ABC"
case .efg: return "EFG"
case .hij: return "HIJ"
}
}
}
extension Channel: Identifiable {
var id: Self { self }
}
还有一些视图实现来填充所述内容:
struct ChannelHome: View {
var body: some View {
VStack {
ForEach(Channel.allCases) { channel in
NavigationLink(destination: ChannelDetail(channel)) {
Text(channel.name)
}
}
}
}
} // big closure yikes
为什么这不起作用?这是由于枚举的性质没有静态属性和 SwiftUI 是声明性的吗?有没有办法解决这个问题?如:
struct ChannelData {
static let channels: [Channel] = [.abc, .efg, .hij]
// or
static func getChannels() -> [Channel] {
var channelArray: [Channel]
for channel in Channel.allCases {
channelArray.append(channel)
}
return channelArray
}
}
或者,最好更多,是否有更好的做法可以在 SwiftUI 视图中呈现像这样的小型数据集?我喜欢在运行时(更接近生产阶段)整体调试时实现属性的可视化 UI。
我提前为这个问题道歉,我只是用 SwiftUI 来解决这个问题。
【问题讨论】:
-
究竟有什么不适合你?一切似乎在这里都很好(Xcode 13 / iOS 15)。也许您只是忘记将
ChannelHome的内容包装到NavigationView以使链接正常工作? -
您的代码在 iOS 15 模拟器上的 Xcode 13 中为我工作。它在屏幕上显示字母。 (我删除了 NavigationLink,因为您没有提供
ChannelDetail) -
顺便说一句,您的
getChannels方法实际上并没有做任何事情。
标签: ios swift macos swiftui enums