在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。
答案 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"
}