Swift - 调用初始化程序,缺少参数

时间:2014-11-11 21:05:06

标签: ios objective-c swift

我使用Swift从objective-c类(JSONModel)调用初始化程序

该类包含一些初始值设定项:

  -(instancetype)initWithString:(NSString*)string error:(JSONModelError**)err;
  -(instancetype)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err;
  -(instancetype)initWithDictionary:(NSDictionary*)dict error:(NSError **)err;
  -(instancetype)initWithData:(NSData *)data error:(NSError **)error;

由于我想调用initWithDictionary,我编写了像

这样的代码
var error:NSError

var loginRes = RegisterResponse(dictionary: dict , error: &error

其中,RegisterResponse是JSONModel的子类,dict是一个预先使用的Dictionary变量

然而,编者抱怨说:  在调用中缺少参数“usingEncoding”的参数。

似乎编译器认为我正在调用

  -(instancetype)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err;
而不是第三个。有没有解决方案?

1 个答案:

答案 0 :(得分:2)

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

映射到Swift为

 init!(dictionary dict: [NSObject : AnyObject]!, error err: NSErrorPointer)

Adopting Cocoa Design Patterns / Error Reporting中所述, 您必须将可选 NSError作为输入输出表达式传递:

var error : NSError?
let loginRes = RegisterResponse(dictionary: dict, error: &error)

或错误检查:

var error : NSError?
if let loginRes = RegisterResponse(dictionary: dict, error: &error) {
    println("success")
} else {
    println(error!.localizedDescription)
}