initWithDictionary:在Objective-C和Swift中

时间:2016-02-28 10:56:47

标签: swift key-value-observing object-object-mapping

在Objective-C中,我们可以像这样使用json响应的对象映射

 PolicyData *policyData = [[PolicyData alloc] initWithDictionary:responseObject error:&err];

这里我们可以使用PolicyData类属性映射responseObject。 我如何在Swift中做同样的事情?

2 个答案:

答案 0 :(得分:2)

它应该像添加桥接头一样容易(因为PolicyData很可能是用Objective-C编写的)。有关如何执行此操作的说明can be seen in this Apple documentation

然后,您可以像执行一样轻松地创建PolicyData对象:

do {
    let newPolicyDataObject = try PolicyData(responseObject)
} catch error as NSError {
    print("error from PolicyData object - \(error.localizedDescription)")
}

这假定您的responseObject是NSDictionary。 Swift 2有助于(?)将错误参数转换为try / catch块。

即PolicyData的

- (instancetype) initWithDictionary:(NSDictionary *)responseObject error:(NSError *)err;

宣言神奇地变成

func initWithDictionary(responseObject : NSDictionary) throws

如Apple Objective-C / Swift互操作性文档的"Error Handling" section中所述。

答案 1 :(得分:2)

您可以添加

convenience init?(dictionary: NSDictionary)

到你想要从字典初始化的任何对象并在那里初始化它的属性。

然而,由于swift不进行动态调度(迟早),您可能不会将其概括为期望属性的名称成为任何对象的字典中的键。