在segue上传递User类型的值

时间:2016-04-05 19:00:46

标签: ios swift segue

我有一类User,其中包含大量用户数据。就像一个联系人应用程序,我想当有人点击联系人时,它会加载一张联系人卡片。通常我使用prepareForSegue和storyboard segue来传递String,Int,Array等的值,但我似乎无法弄清楚如何发送User类型的值。在发送方面,我已正确设置但我无法弄清楚如何设置接收视图。我想发送整个东西而不是使用点语法并单独抓取每个元素的原因是因为(像联系人应用程序)我希望用户能够向联系人卡添加字段而我不希望输入我需要传递的所有数据,除非我必须这样做。

用户类:

class User {
    var firstName = ""
    var lastName = ""
    var email = ""
    var birthday = ""
    var team = ""
    var schedule = ""
    var service = ""
    var position = ""
    var phoneNumber = ""
    var dateStarted = ""
    var profileImgURL = ""
    var notes = ""

    init (firstName:String, lastName:String, email:String, birthday:String, team:String, schedule:String, service:String, position:String, phoneNumber:String, dateStarted:String, profileImgURL:String, notes:String) {
        self.firstName = firstName
        self.lastName = lastName
        self.email = email
        self.birthday = birthday
        self.team = team
        self.schedule = schedule
        self.service = service
        self.position = position
        self.phoneNumber = phoneNumber
        self.dateStarted = dateStarted
        self.profileImgURL = profileImgURL
        self.notes = notes
    }

发信人:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SeeContactCardSegue" {
        if let destVC = segue.destinationViewController as? ContactCardTVC {
            if let indexPath = tableView.indexPathForSelectedRow {
                let user = users[indexPath.row]
                destVC.user = user
            }
        }
    }
}

接收器:

var user:User = ???

我收到一条错误消息,说用户需要初始化,我在大多数情况下会得到这些错误,但我不知道如何初始化它。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

我有一种感觉,如果您通过模态segue显示不同的视图,我遇到了同样的问题 - destinationViewController是UINavigationController而不是您的控制器。首先在调试器中验证您实际进入if let destVC = segue.destinationViewController as? ContactCardTVC块并且segue.destinationViewController确实是ContactCardTVC

如果我的假设是正确的,你的destinationViewController是一个UINavigationController,你的代码应该如下所示:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)     {
    if segue.identifier == "SeeContactCardSegue" {
        let nav = segue.destinationViewController as! UINavigationController
        let cardContactVC = nav.topViewController as! ContactCardTVC   
            if let indexPath = tableView.indexPathForSelectedRow {
                let user = users[indexPath.row]
                cardContactVC.user = user
            }

    }
}

答案 1 :(得分:0)

强行打开它。它应该工作正常。

var user:User!