假设我们这样定义一个对象:
let object: AnyObject = {
var result = UILabel(frame: CGRect(x: 0, y: 0, width: 150, height: 50))
result.text = "First Text"
result.backgroundColor = UIColor.blueColor()
return result
}()
对于这个例子,我显式地创建了一个UILabel
,但是在我的实际项目中我不知道创建了什么类型的对象,所以我只是把结果当作AnyObject
对于这个例子。该对象只是一个标准的 UILabel,在蓝色背景上带有“First Text”文本,默认左对齐。
在这个示例中,我知道这个对象实际上是一个 UILabel
,所以我知道我可以像这样更改它的属性:
(object as UILabel).text = "Second Text"
现在我已经更改了文本。但是在我的实际项目中,我不知道我的对象是 UILabel
,所以我不能只使用 (object as UILabel)
技巧,因为它不是始终是 UILabel
。我的解决方法是使用 setValueForKey
。在使用 respondsToSelector
(未在此示例中显示)检查我的对象是否具有名为“text”的成员后,我可以这样更改文本:
object.setValue("Third Text", forKey: "text")
现在,如果我想更改对象的 textAlignment
,在检查对象确实有一个名为 textAlignment
的成员后,我想做一些事情像这样:
object.setValue(NSTextAlignment.Center, forKey: "textAlignment")
这样做会导致错误:
Type 'NSTextAlignment' does not conform to protocol 'AnyObject'
我在尝试设置 frame
时遇到了类似的问题,因为它不喜欢 CGRect
类型,但我能够通过将 CGRect
转换为 NSValue
。但是,我找不到一种方法来修复 enum
类型,例如 NSTextAlignment
。
有人知道我如何在这里实现我的目标吗?
最佳答案
你必须使用原始值 NSTextAlignment.Center.rawValue
object.setValue(NSTextAlignment.Center.rawValue, forKey: "textAlignment")
关于dynamic - 在 Swift 中,如何使用 setValueForKey 设置对象的 textAlignment 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034187/