按名称获取出口变量

Get an outlet variable by name

在 swift 中寻找以编程方式访问插座的方法:

@IBOutlet var label1: UILabel?
var outletName = "label1"
view[outletName].text = "hello, world!"

像这样创建我自己的自定义映射是唯一的方法吗?

@IBOutlet var label1: UILabel?
let outlets = ["label1": label1]
let outletName = "label1"
outlets[outletName].text = "hello, world!"

编辑: 看来我原来的问题措辞不当,让我们再试一次:
我正在寻找通过一些字符串标识符访问变量。在我最初的问题中,我试图询问是否可以通过变量本身的名称以某种方式访问​​变量。 IE 使用变量名称 "label1".

的字符串访问变量 label1

有一种更简单的方法可以实现您的目标。首先在你的 viewDidLoad 中,给你的出口一个唯一的标签号,而不是 0

label1.tag = 1

然后,只要你想访问它

if let theLabel = self.view.viewWithTag(1) as? UILabel {
    theLabel.text = "hello, world!"
}

将字符串转换为 属性 访问在纯 Swift 中实际上有点困难。

您可以使用一些 objective-c API 来帮助您。

// Mark your outlet variable as dynamic
@IBOutlet dynamic var label1: UILabel?

var outletName = "label1"
// Then you can access it via a key path (aka string)
if let myProperty = value(forKey: outletName) as? UILabel {
    myProperty.text = "Hello, world!"
}

Swift 5 版本:

if let aLabel = value(forKey: "label1") as? UILabel {
    aLabel.text = "Hello World"
}