【问题标题】:Swift - Calling initializer, missing argumentSwift - 调用初始化程序,缺少参数
【发布时间】:2014-11-12 16:07:06
【问题描述】:

我正在使用 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;

而不是第三个。有什么解决办法吗?

【问题讨论】:

  • 试试var error:NSError?
  • 删除了我的答案,尽管您使用的是第一个初始化程序。 @MartinR 的评论应该是解决方案

标签: ios objective-c swift


【解决方案1】:
 -(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)
}

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多