2015-09-19 2 views
0

Это мой первый опыт Swift. Я следую примеру в книге Swift по примеру, и, видимо, есть опечатка, когда я скопировал код из github автора site.Значение необязательного типа String? не разворачивается с text.toInt

Вот соответствующий код, который, как представляется, вызывает проблему. Я получаю эту ошибку:

Value of optional type String? not unwrapped

в этой строке: пусть число = numberTxtField.text.toInt().

@IBOutlet weak var numberTxtField: UITextField! 

    @IBAction func onOkPressed(sender: AnyObject) { 
     let number = numberTxtField.text.toInt() 
     if let number = number { 
      selectedNumber(number) 
     } else { 
      var alert = UIAlertController(title: nil, message: "Enter a number", preferredStyle: UIAlertControllerStyle.Alert) 
      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    } 

Может кто-то любезно объяснить, как это исправить, как это день для меня с Swift, и я все еще пытаюсь переварить символы, как! а также ? а также ??

Я читал другие вопросы, подобные этому, но они, похоже, не помогли мне решить эту проблему.

Благодаря

ответ

-1

В Swift 2,0 вы можете использовать инициализатор для целого, например

let number = Int(numberTxtField.text!) 

самом деле, вероятно безопаснее сделать:

if let text = numberTxtField.text { 
    let number = Int(text) 
} 
+1

Int (numberTxtField.text!) –

+0

@LeoDabus true, принудительное развертывание необходимо в этом случае – lucianomarisi

+0

Я принимаю этот ответ, поскольку он казался более упорядоченным, но ответ, предоставленный the_critic, также работал. Оба введено предупреждение в этой строке: var alert = UIAlertController (название: nil, message: «Введите число», preferredStyle: UIAlertControllerStyle.Alert) , но, принимая предложение Xcode добавить let перед этим утверждением, позволило мне создать код успешно. Теперь, чтобы больше узнать о опциях. Всем спасибо. – Jazzmine

0

Проблема с кодом является то, что текстовое значение UITextField является необязательным, что означает, что оно может быть nil (Проверьте Apple Docs for Optional Types).

Чтобы использовать текстовое значение, вам действительно нужно его развернуть.

Что-то, как это даст вам ваш фактический текст:

numberTxtField.text! // unwraps the value of the optional 

Берегись, хотя! Если текстовое значение nil, восклицательный знак приведет к краху вашего заявления.

Так быть более осторожным, использовать только значение, если оно существует, например, так:

if let text = numberTxtField.text{ 
    yourInt = Int(text) 
} 

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

Удачи вам в Swift!

Смежные вопросы