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

Swift如何在集合中存储UIImage及对应描述并实现循环翻页功能?

问题原因

现有代码无法循环的核心是两个按钮点击的边界判断逻辑为「到首尾直接终止操作」,同时代码遗漏了当前浏览索引count的全局定义,且初始加载时没有触发首次图片展示。

修改后的完整代码

class ViewController: UIViewController {
    // 新增当前浏览索引变量,初始值为0指向第一条内容
    var count = 0
    
    var photoCollection: [[String:Any]] = [
        ["image": UIImage(named: "Sea house")!, "text": "sea house"]
        // 其余图片可继续按此格式添加
    ]

    @IBOutlet weak var photo: UIImageView!
    @IBOutlet weak var Text: UILabel!

    func showImage() {
        photo.image = photoCollection[count]["image"] as! UIImage
        Text.text = photoCollection[count]["text"] as! String
    }

    @IBAction func Previous(_ sender: UIButton) {
        // 上一张逻辑:已经是第一张时跳转到最后一张,否则索引减1
        if count == 0 {
            count = photoCollection.count - 1
        } else {
            count -= 1
        }
        showImage()
    }

    @IBAction func Next(_ sender: UIButton) {
        // 下一张逻辑:已经是最后一张时跳转到第一张,否则索引加1
        if count == photoCollection.count - 1 {
            count = 0
        } else {
            count += 1
        }
        showImage()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // 初始加载时展示第一条内容,避免页面空白
        showImage()
    }
}

简化写法说明

也可以用取模运算省略边界判断的分支代码,逻辑效果完全一致:

@IBAction func Previous(_ sender: UIButton) {
    // 加集合长度避免出现负数,保证取模结果始终在合法索引范围内
    count = (count - 1 + photoCollection.count) % photoCollection.count
    showImage()
}

@IBAction func Next(_ sender: UIButton) {
    count = (count + 1) % photoCollection.count
    showImage()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:03