【问题标题】:SwiftUI: How to interstellare array of enums?SwiftUI:如何星际数组枚举?
【发布时间】:2022-11-01 20:17:42
【问题描述】:
我有一个枚举数组,其中每个枚举都包含图像或视频。我想遍历数组并获取每个枚举中的值。如果枚举包含一个图像,我想得到那个值,如果它包含一个视频,那么得到那个值。
那么如果枚举,我如何循环遍历数组?
这是我的代码:
import UIKit
import AVFoundation
enum ContentSource {
case image(UIImage)
case video(AVPlayer)
}
var post : [ContentSource] = []
【问题讨论】:
标签:
image
video
swiftui
enums
iteration
【解决方案1】:
您必须有一个switch 才能确定它在循环中的类型。
var posts : [ContentSource] = []
for post in posts {
switch post {
case .image(let uIImage):
print("UIImage")
case .video(let aVPlayer):
print("UIImage")
}
}
【解决方案2】:
你可以尝试这样的事情:
enum ContentSource: Hashable {
case image(UIImage)
case video(AVPlayer)
}
struct ContentView: View {
@State var posts : [ContentSource] = []
var body: some View {
List(posts, id: .self) { item in
switch(item) {
case .image(let img):
Text(img.description) // show image
case .video(let avPlayer):
Text(avPlayer.description) // play video
}
}
.onAppear {
let img = UIImage(systemName: "globe")!
let av = AVPlayer()
posts = [.image(img), .video(av)]
}
}
}
【解决方案3】:
你能试试这个吗,你可以得到相关的值并随心所欲地使用它们
enum ContentSource {
case image(UIImage)
case video(AVPlayer)
}
var post :[ContentSource] = []
let testContent = ContentSource.video(AVPlayer())
switch testContent {
case .image(let img):
print("i got img")
case .video(let video):
print("i got video")
}