Exia
Exia

Reputation: 2551

Swift - Calling initializer, missing argument

I am use Swift to call an initializer from objective-c class(JSONModel)

The class contains some initializer:

  -(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;

Since I want to call the initWithDictionary one, I write code like

var error:NSError

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

in which , RegisterResponse is a subclass of JSONModel, dict is a pre-used Dictionary variable

However, the complier complains like: missing argument for parameter "usingEncoding" in call.

It seems that the complier think I am calling the

  -(instancetype)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err;

rather than the third one. Are there any solution?

Upvotes: 1

Views: 806

Answers (1)

Martin R
Martin R

Reputation: 539685

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

is mapped to Swift as

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

As explained in Adopting Cocoa Design Patterns / Error Reporting, you have to pass an optional NSError as an in-out expression:

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

or with error checking:

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

Upvotes: 2

Related Questions