Я изучаю Swift прямо сейчас, и в ходе курса у нас есть урок, чтобы сделать простое приложение. Теперь у меня проблемы с программированием текстовых полей, что он работает неправильно.Learning Swift, значение необязательного типа, не развернутого при создании объекта
Вот мой код:
class ViewController: UIViewController {
@IBOutlet weak var refeicaoField: UITextField?
@IBOutlet weak var felicidadeField: UITextField?
@IBAction func addRefeicao(sender: UIButton) {
if refeicaoField == nil || felicidadeField == nil {
return
}
let nomeRefeicao = refeicaoField!.text
let valorFelicidade = felicidadeField!.text
let valorFelicidadeInt = Int(valorFelicidade!)
let novaRefeicao = Meal(nomeAlimento: nomeRefeicao, alegriaEmComer: valorFelicidadeInt)
}
}
Проблема начинается здесь:
let novaRefeicao = Meal(nomeAlimento: nomeRefeicao, alegriaEmComer: valorFelicidadeInt)
Где это говорит: '? Int' значение необязательного не разворачивается; вы хотели использовать '!' или '?' а также значение необязательной строки? не разворачивается; вы хотели использовать '!' или '?'
Я немного запутался, потому что в примере урока они сделали так:
let novaRefeicao = Meal(nomeAlimento: nomeRefeicao, alegriaEmComer: valorFelicidadeInt!)
И работал, но для меня нет. И если я попытаюсь поставить «!» по двум переменным, у меня есть восклицательное предупреждение, не требующее использования для novaRefeicao.
Что случилось?
EDIT:
Совершено некоторые изменения, используя все найденные советы здесь, теперь мой код, как:
class ViewController: UIViewController {
@IBOutlet weak var refeicaoField: UITextField!
@IBOutlet weak var felicidadeField: UITextField!
@IBAction func addRefeicao(sender: UIButton) {
if refeicaoField == nil || felicidadeField == nil {
return
}
let nomeRefeicao = refeicaoField!.text
let valorFelicidade = felicidadeField!.text
if nomeRefeicao == nil {
return
}
if let valorFelicidadeInt = Int(valorFelicidade!) {
let novaRefeicao = Meal(nomeAlimento: nomeRefeicao, alegriaEmComer: valorFelicidadeInt)
} else {
return
}
}
}
Теперь я получаю ошибку на развернутый снова, но теперь с «nomeRefeicao вместо этого. Пытался поставить «!» в нем, но затем он показывает, что пусть novaRefeicao является неизменным значением.
Если предполагается, что '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'должны быть подключены в Interface Builder, это довольно бессмысленно объявлять их как optionals ('? '). Если ваш курс подскажет это, пойдите для лучшего курса. Способ, рекомендованный Apple, состоит в том, чтобы объявить их как неявные развернутые необязательные ('!'), Потому что они безопасно не равны нулю при подключении. Преимущество состоит в том, чтобы избавиться от всех восклицательных знаков, чтобы развернуть их в коде, и, конечно же, проверка на 'nil' при каждом вызове метода тоже не требуется. – vadian