Передача значений типа User через переход

У меня есть класс User, в котором много пользовательских данных. Как и в случае с контактным приложением, я хотел бы, чтобы когда кто-то нажимал на контакт, загружалась карточка контакта. Обычно я использую prepareForSegue и переход раскадровки для передачи значений 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 = ???

Я получаю сообщение об ошибке, в котором говорится, что пользователя необходимо инициализировать, что я получаю в большинстве ситуаций, но я не уверен, как это инициализировать. Я что-то упускаю?


person Michael Williams    schedule 05.04.2016    source источник


Ответы (2)


Принудительно разверните его. Он должен работать нормально.

вар пользователя: Пользователь!

person Abhishek729    schedule 05.04.2016
comment
случается со всеми. :-) - person Abhishek729; 05.04.2016

У меня есть ощущение, что вы столкнулись с той же проблемой, что и я, если вы показываете другое представление через модальный переход - что targetViewController является UINavigationController, а не вашим контроллером. 1-й проверьте в отладчике, что вы действительно входите в блок 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
            }

    }
}
person DannyP    schedule 05.04.2016