来自String的UIImageView的名称

问题描述

如何用字符串替换UIImageview的名称

name\(number).isHidden = false

不起作用

name1.isHidden = false

感谢于尔根

解决方法

您不能那样做。 Swift是一种编译语言,而不是脚本语言。

“ name1”在源代码中仅存在

如果确实需要使用对象(无论是图像视图还是其他UI元素),以便可以“按名称”引用它们,那么最好的选择就是创建字典。

假设您已在Storyboard中添加了图像视图,并通过@IBOutlet将它们连接起来,例如:

@IBOutlet var name1: UIImageView!
@IBOutlet var name2: UIImageView!
@IBOutlet var name3: UIImageView!
@IBOutlet var name4: UIImageView!

您可以像这样在viewDidLoad()中创建字典:

class TestViewController: UIViewController {
    
    @IBOutlet var name1: UIImageView!
    @IBOutlet var name2: UIImageView!
    @IBOutlet var name3: UIImageView!
    @IBOutlet var name4: UIImageView!

    var imageViews: [String : UIImageView] = [:]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageViews["name1"] = name1
        imageViews["name2"] = name2
        imageViews["name3"] = name3
        imageViews["name4"] = name4
    }
}

然后,您可以“按名称”获得对图像视图的引用:

    let i = 3
    // make sure we get a valid reference
    if let imgView = imageViews["name\(i)"] {
        imgView.isHidden = false
    }
    

由于许多原因,这不是一个好方法。

一种更好的方法是将它们连接到@IBOutlet集合:

@IBOutlet var imageViews: [UIImageView]!

将所有图像视图都连接到该@IBOutlet ...然后在运行时,您可以像以下一样容易地获得引用:

imageViews[number].isHidden = false