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
相关产品推荐
相关产品推荐

