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 不进行动态调度(迟早如此),您可能无法将其概括为期望属性的名称是任何对象的字典中的键。
在 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 不进行动态调度(迟早如此),您可能无法将其概括为期望属性的名称是任何对象的字典中的键。