【问题标题】:How to create the instance of the class having the init() method in Swift?如何在 Swift 中创建具有 init() 方法的类的实例?
【发布时间】:2016-07-12 15:55:22
【问题描述】:

这是我的 LoginData 模型类:

class LoginData
{
    var sessionToken : String!
    init(fromJson json: JSON!)
    {
    if json == nil
     {
      return 
     }
    sessionToken = json["Session_Token"].stringValue
   }
}

我想为以下类中的类创建实例:

  class Confirm
{
 var modelobj = model()
   // If I used to create instance I got error like this( **Missing argument for parameter 'fromJson' in call**) and how to create instance for this class

}

【问题讨论】:

  • 试试这个var objLoginData = LoginData(fromJson: json)For more info
  • 这是初始化程序的一个非常令人困惑的设计。创建一个可失败的初始化程序 (init?(...) 在失败时返回 nil,或者在创建实例之前检查 JSON 并使用非可选类型。
  • 如果我尝试这样 var objLoginData = LoginData(fromJson: json),我需要声明 json....@Chandan Prajapati
  • @GuganReddy,您必须传递 JSON 类型的参数来创建 LoginData 的实例,因为您正在使用参数化初始化程序。并且编译器没有使用默认初始化程序。只需手动添加一个像 init(){ } 这样的初始化程序,然后你就可以像 var objLoginData = LoginData() 这样初始化谢谢

标签: json swift alamofire mvcc


【解决方案1】:

正如其他人所提到的,这个初始化器应该是可失败的。 sessionToken 不再需要是隐式展开的可选项 (String!)。我还将代码格式化为 Swift 的约定。

class LoginData {
    var sessionToken: String

    init?(fromJson json: JSON) {
        guard let sessionToken = json["Session_Token"].stringValue else {
            return nil
        }

        self.sessionToken = sessionToken
    }
}

然后实例化它:

guard let loginData = LoginData(fromJson: someJson) else {
    //Initializer failed. Recover from error here.
    //Must break, return, or call @noreturn function
}

//use loginData

必须使用 json 参数调用初始化程序,因为不存在没有参数的初始化程序。

【讨论】:

  • 这不会编译,因为SwiftyJSON 库的stringValue 是非可选的
  • @vadian 哦,好吧。请您相应地编辑它吗?
  • 抱歉,我基本上不会编辑其他帖子中的代码,在这种情况下这很困难,因为根据 OP 的请求,传递的 JSON 应该是可选的。
猜你喜欢
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多