Я рекомендую прочитать Язык программирования Swift , чтобы лучше понять Swift и его фундаментальные концепции, поскольку этот вопрос довольно прост.
Вы делаете несколько ошибок:
if sunscreenName.text != nil && reapplyTime.text != nil {
Это неправильно. В Swift, если вы планируете использовать значение позже, вы должны использовать if let
вместо сравнения с nil
. Сравнение с nil
оставляет значения необязательными, но if let
разворачивает их. Итак, сделайте это вместо:
if let sunscreenText = sunscreenName.text, let reapplyText = reapplyTime.text {
Теперь у вас есть переменные sunscreenText
и reapplyText
, которые набираются String
, а не String?
(то есть они не являются обязательными).
Теперь есть эти две строки.
sunscreen = sunscreenName.text!
reApplyTime = reapplyTime.text
Вы не говорите, кто из них дает ошибку, но проблема одинакова в любом случае. Во-первых, используйте наши развернутые переменные sunscreenText
и reapplyText
вместо sunscreenName.text!
и reapplyTime.text
. Затем, если один из них должен быть Int
вместо String
, разыграйте его. Swift не похож на JavaScript, так как он не будет автоматически преобразовывать значения из одного типа в другой, поэтому, если что-то является строкой и нам нужно целое число, мы должны преобразовать ее сами.
(при условии reapplyTime
была строка, которая выдавала ошибку:)
if let reapplyInt = Int(reapplyText) {
reapplyTime = reapplyInt
}
Причина, по которой нам нужно развернуть, заключается в том, что Int(String)
может вернуть nil
, если строка является чем-то, что не может быть преобразовано в целое число. В качестве альтернативы, мы могли бы просто предоставить значение по умолчанию:
reapplyTime = Int(reapplyText) ?? 0 // sets to 0 if it can't parse the string as an integer