2017-01-14 6 views
0

Im tring для передачи первого имени пользователя другому контроллеру представления при нажатии кнопки и сделайте это успешно. Но я столкнулся с проблемой увидеть «Необязательный (имя)» в моем выпуске. Как я могу избавиться от этого?Как избавиться от опции «Необязательный (...)» в моем представлении при передаче данных в другой ViewController

первый View Controller:

@IBOutlet weak var firstName: UITextField! 
@IBOutlet weak var lastName: UITextField! 

@IBOutlet weak var email: UITextField! 
@IBOutlet weak var password: UITextField! 

var userFirstName: String = "" 
var userLastName = "" 
var userEmail = "" 
var userPassword = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(AccountViewController.dismissKeyboard)) 

    //Uncomment the line below if you want the tap not not interfere and cancel other interactions. 
    //tap.cancelsTouchesInView = false 

    view.addGestureRecognizer(tap) 
    // Do any additional setup after loading the view. 
} 

func dismissKeyboard() { 
    //Causes the view (or one of its embedded text fields) to resign the first responder status. 
    view.endEditing(true) 
} 




@IBAction func createAccountBtn(_ sender: Any) { 
    userFirstName = String(describing: firstName.text) 
    userLastName = String(describing: lastName.text) 
    userEmail = String(describing: email.text) 
    userPassword = String(describing: password.text) 

    print(userFirstName) 

} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let newVC: WelcomingViewController = segue.destination as! WelcomingViewController 

    newVC.userFirstName = userFirstName 

второй контроллер представления:

@IBOutlet weak var firstNameLabel: UILabel! 

var userFirstName: String? = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 


    firstNameLabel.text = userFirstName! 
} 
+0

Вам действительно нужно «userFirstName», чтобы быть необязательным? –

+0

Мне не нужно, чтобы он был необязательным, но даже если я не устанавливаю ни одну из переменных в качестве опции, на выходе все еще есть опция «Необязательный()». Ты знаешь почему? –

ответ

2

Больше, чем решение, необходимое для ознакомления с базовым представлением об опциональном в Swift.

Swift Optional

Вы можете пойти на

  1. форсированного Unwrapping: Сделайте это, если вы очень уверены в содержании. В противном случае приложение будет врезаться

    firstNameLabel.text = userFirstName! 
    
  2. Дополнительный Переплет: Это более безопасный способ

    if let firstName = userFirstName { 
        firstNameLabel.text = firstName 
    } 
    
0

Попробуйте это:

if let firstName = userFirstName { 
    firstNameLabel.text = firstName 
} 

Это гарантирует, что userFirstName не ноль, прежде чем он передается в ваш метка.

Редактировать

Однако, одна вещь, чтобы заметить, что если вы специально установки userFirstName к нулю в какой-то момент, вы не нужно быть необязательным, потому что вы даете ему начальное значение "" , Необязательно для чего-то, что может иметь или не иметь значения, и, следовательно, его нужно рассматривать более тщательно.

1

Кроме if let подход, вы можете использовать ноль сливающихся так:

firstNameLabel.text = userFirstName ?? "n/a" 

Это обеспечивает резервную строку (или пустую строку, если вы предпочитаете) в случае, если оригинальная переменная e равно нулю.