来自 UIImageView 来自 String 的名称

name from UIImageView from String

如何用字符串替换 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 ...然后在 run-time 您可以像以下一样轻松地获得参考:

imageViews[number].isHidden = false