initWithDictionary:在 Objective-C 和 Swift 中

initWithDictionary: in Objective-C and Swift

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

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

在这里我们可以将 responseObject 映射到 PolicyData class 属性。 我怎样才能在 Swift 中做同样的事情?

它应该像添加桥接头一样简单(因为 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 中所述。

您可以添加一个

convenience init?(dictionary: NSDictionary)

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

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