You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI:如何遍历含关联值的枚举数组并提取对应值?

遍历枚举数组提取关联值的实现方法

你可以通过for-in循环配合switch语句来遍历ContentSource数组,逐个判断枚举类型并提取对应的关联值。下面是具体的实现示例:

基础遍历提取

先给数组填充测试数据,再遍历处理每个元素:

import UIKit
import AVFoundation

enum ContentSource {
    case image(UIImage)
    case video(AVPlayer)
}

// 填充测试数据(实际场景替换为你的真实内容)
let testImage = UIImage(named: "test")!
let testPlayer = AVPlayer(url: URL(string: "https://example.com/video.mp4")!)
var post: [ContentSource] = [.image(testImage), .video(testPlayer), .image(UIImage())]

// 遍历数组提取关联值
for content in post {
    switch content {
    case .image(let image):
        // 这里写处理UIImage的逻辑,比如显示到视图
        print("获取到图片:\(image)")
    case .video(let player):
        // 这里写处理AVPlayer的逻辑,比如添加到播放器层播放
        print("获取到视频播放器:\(player)")
    }
}

分类收集关联值

如果需要把图片和视频分别归类到不同数组,可按以下方式实现:

var collectedImages: [UIImage] = []
var collectedPlayers: [AVPlayer] = []

for content in post {
    switch content {
    case .image(let image):
        collectedImages.append(image)
    case .video(let player):
        collectedPlayers.append(player)
    }
}

// 后续可直接使用分类后的数组
print("共收集到\(collectedImages.count)张图片,\(collectedPlayers.count)个视频播放器")

给枚举添加便捷取值方式(可选)

你可以给ContentSource扩展计算属性,让取值逻辑更简洁:

extension ContentSource {
    var image: UIImage? {
        if case .image(let img) = self {
            return img
        }
        return nil
    }
    
    var player: AVPlayer? {
        if case .video(let player) = self {
            return player
        }
        return nil
    }
}

// 遍历时代码更简洁
for content in post {
    if let image = content.image {
        print("处理图片:\(image)")
    } else if let player = content.player {
        print("处理视频:\(player)")
    }
}

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:20:52