Reputation: 2551
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
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