【问题标题】:Cannot assign value of type 'String?' to type 'Int'无法分配“字符串”类型的值?输入'Int'
【发布时间】:2018-10-11 03:17:00
【问题描述】:

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

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

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

     //Some sort of message such as Progress hud
 }

提前致谢!

【问题讨论】:

  • 哪一行有错误?大概reApplyTimeInt 而不是String?

标签: ios swift string int


【解决方案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

【讨论】:

    【解决方案2】:

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

    所以你要做的是在Int 中存储一个String 值,这不会自动发生,你需要将它转换为Int

    像这样 Int(sunscreenName.text)

    但有一个问题,并非所有字符串都可以转换为 Int 类型,例如

    let name = "roshan"
    

    如果您尝试将其转换为 Int,它会给您一个 nil

    let a = Int(name)

    所以最好在此处执行 Swift 提供的可选绑定

    if let sunValue = Int(sunscreenName.text),let reApplyValue = Int(reapplyTime.text) {
     sunscreen = sunValue
     reApplyTime = reApplyValue
    }
    

    【讨论】:

    • 感谢它解决了问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多