我对(例如)UIView
的setValue:forKey
方法有疑问。
我有以下代码:
let label = UILabel()
label.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10)
let margins = label.valueForKey("layoutMargins")
在调试器中,margins
的类型与值Some
(AnyObject?)
。
如果我使用变量margins
在UIView
上设置值,这将按预期工作:
let label2 = UILabel()
label2.setValue(margins, forKey: "layoutMargins")
但是,如果我尝试使用 setValue:forKey
方法直接设置 UIEdgeInsets 结构,这当然不起作用,因为它需要的是AnyObject
而不是结构。
label2.setValue(UIEdgeInsetsMake(5,5,5,5), forKey: "layoutMargins")
我是否可以将此UIEdgeInsets
包装在某物中或将其转换为某物以便能够使用该setValue
方法设置值?
用 NSValue
包装UIEdgeInsets
。 iOS已经通过+[NSValue valueWithUIEdgeInsets:]
提供了必要的支持,因此解决方案应如下所示:
label2.setValue(NSValue(UIEdgeInsets: UIEdgeInsetsMake(5,5,5,5)), forKey: "layoutMargins")