Невозможно присвоить значение типа 'String?' набрать 'Int' - PullRequest
0 голосов
/ 01 мая 2018

Я получаю сообщение об ошибке Невозможно присвоить значение типа 'String?' набрать 'Int'

Я просмотрел другие подобные вопросы, но это все равно показывает ошибку.

 if sunscreenName.text != nil && reapplyTime.text != nil {
     sunscreen = sunscreenName.text!
     reApplyTime = reapplyTime.text

     //Some sort of message such as Progress hud
 }

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

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

Итак, вы сохраняете значение String в Int, что не произойдет автоматически, вам нужно преобразовать его в Int

как это Int(sunscreenName.text)

Но есть загвоздка в том, что не все строки могут быть преобразованы в тип Int, например,

let name = "roshan"

если вы попытаетесь преобразовать его в Int, это даст вам ноль

let a = Int(name)

Так что лучше сделать дополнительную привязку , предоставленную Swift

if let sunValue = Int(sunscreenName.text),let reApplyValue = Int(reapplyTime.text) {
 sunscreen = sunValue
 reApplyTime = reApplyValue
}
0 голосов
/ 01 мая 2018

Я рекомендую прочитать Язык программирования 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...