setValue:forKey with struct



我对(例如)UIViewsetValue:forKey方法有疑问。

我有以下代码:

let label = UILabel()
label.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10)
let margins = label.valueForKey("layoutMargins")

在调试器中,margins的类型与值Some (AnyObject?)

如果我使用变量marginsUIView上设置值,这将按预期工作:

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")

最新更新