按名称获取出口变量

时间:2017-07-09 14:05:12

标签: swift iboutlet

在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。

3 个答案:

答案 0 :(得分:3)

在纯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!"
}

答案 1 :(得分:1)

有一种更简单的方法来实现您的目标。首先在viewDidLoad中,为您提供一个唯一的标记号,而不是0

label1.tag = 1

然后,只要你想访问它

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

答案 2 :(得分:1)

Swift 5版本:

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