【问题标题】:Swift: My Convenience init does not see the normal init斯威夫特:我的便利初始化没有看到正常的初始化
【发布时间】:2015-10-23 15:29:59
【问题描述】:

我正在尝试为我的班级创建一个方便的初始化:用户。我以前为另一个类做过这个,并且 - 再次创建它 - 我使用了相同的代码,只是我的 User 类有所不同。

这是我的用户类:

import Foundation

class User {
    //Database Variables
    let userID: String?
    let firstName: String?
    let lastName: String?
    let password: String?
    let emailID: String?
    let dob: String? //timestamp
    let picture: String? //URL?
    let location: Location?
    let sex: String?

    convenience init(data: [[String: AnyObject]]) {
        self.init(userID: String(data["user_id"]!),
            firstName: String(data["first_name"]!),
            lastName: String(data["last_name"]!),
            password: String(data["password"]!),
            emailID: String(data["email"]!),
            dob: String(data["dob"]!),
            picture: String(data["picture"]!),
            location: Location(
                String(data["street"]!),
                String(data["city"]!),
                String(data["state"]!),
                String(data["zip"]!),
                String(data["country"]!)),
            sex: String(data["sex"]!))
    }

    init (userID: String, firstName: String, lastName: String,
          password: String, emailID: String, dob: String,
          picture: String, location: Location, sex: String) {
        self.userID = userID
        self.firstName = firstName
        self.lastName = lastName
        self.password = password
        self.emailID = emailID
        self.dob = dob
        self.picture = picture
        self.location = location
        self.sex = sex
    }

但是,Swift 看不到 self.init 方法。我收到了Could not find an overload for init that accepts the supplied arguments

怎么了?

【问题讨论】:

  • 看起来您正在调用带有一些额外参数的 init:城市、州、邮编...
  • 对,但这些都是 Location 对象的一部分
  • 您的 Location 初始化程序似乎有错误,您可以在 Location 类中发布 init 方法的代码吗?
  • 这里:init(streetAddress: String, city: String, state: String, zipCode: String, countryCode: String)
  • 错误消息指的是Location(...)调用,因为缺少参数名称:Location(streetAddress: ..., city: ..., ...)

标签: ios swift init


【解决方案1】:

除了彼得所说的字典数组之外, Location对象的创建

Location(String(data["street"]!), String(data["city"]!), String(data["state"]!), String(data["zip"]!)

错误,因为缺少参数名称。 从您的其他代码中假设这是 Swift 2,它应该是

Location(streetAddress: String(data["street"]!), city: String(data["city"]!), state: String(data["state"]!)

【讨论】:

    【解决方案2】:

    您将init 传递给Dictionary [[String : AnyObject]] 的数组 你的意思是只传递一个Dictionary: [String : AnyObject] 吗?

    【讨论】:

    • 是的,我做到了。但是,即使进行了更改,代码也无法编译
    【解决方案3】:

    在方便初始化中的 self.init(...) 之后按 Enter。如果参数正确,它将消除错误。

    【讨论】:

    • 它没有用。如果我尝试让 Xcode 自动完成 self.init( 的参数,它只会写 self
    • 这很奇怪,它无法自动完成通话。但它消除了我在写下整个 init 调用并按 Enter 时遇到的错误。
    【解决方案4】:

    首先,我认为你的声明是错误的,当你应该只声明一个普通数组时,你声明了一个数组数组。

    错误:

    convenience init(data: [[String: AnyObject]])
    

    正确:

    convenience init(data: [String: AnyObject])
    

    之后,你必须像这样传递参数:

    self.init(userID: (data["user_id"] as! String).....
    

    希望对你有所帮助:)

    【讨论】:

      猜你喜欢
      • 2019-09-11
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多