无法指定类型'字符串的值?'输入' Int'

时间:2018-05-01 01:58:03

标签: ios swift string int

我收到错误消息无法分配类型'字符串的值?'输入' Int'

我浏览过这样的其他问题,但它仍然显示错误。

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

     //Some sort of message such as Progress hud
 }

提前致谢!

2 个答案:

答案 0 :(得分:2)

我遇到了你的问题,实际上这里发生的事情是Swift是类型安全langauge

所以你要做的是在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
}

答案 1 :(得分:1)

我建议阅读The Swift Programming Language以更好地理解Swift及其基本概念,因为这个问题非常基础。

你犯了几个错误:

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

这是错误的。在Swift中,如果您打算稍后使用该值,则应使用if let而不是与nil进行比较。与nil相比,值可选,但if let将其展开。所以,请改为:

if let sunscreenText = sunscreenName.text, let reapplyText = reapplyTime.text {

现在您拥有sunscreenTextreapplyText个变量,这些变量的类型为String,而不是String?(即它们不是可选的)。

现在,有这两行。

sunscreen = sunscreenName.text!
reApplyTime = reapplyTime.text

你不知道哪一个给出错误,但在任何一种情况下问题都是相同的。首先,使用我们展开的sunscreenTextreapplyText变量,而不是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