Swift:我的便利init看不到正常的init

问题描述 投票:2回答:4

我正在尝试为我的班级创建一个方便的初始化:用户。我之前已经在另一个类上完成了此操作,并且-要再次创建它-我使用了相同的代码,只是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

怎么了?

ios swift init
4个回答
1
投票

除了彼得对字典数组所说的话,位置对象的创建

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"]!)

1
投票

您正在将init数组传递给便利Dictionary [[String : AnyObject]]您是否只想传递Dictionary: [String : AnyObject]


0
投票

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


0
投票

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

错误:

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

正确:

convenience init(data: [String: AnyObject])

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

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

希望我对您有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.