【问题标题】:How to convert String to Int in Swift?如何在 Swift 中将 String 转换为 Int?
【发布时间】:2017-03-21 13:36:43
【问题描述】:

这个问题的标题相同,但情况不同。 在这种情况下,这很简单,但我在网上找不到同样的问题。 这是代码

class ViewController: UIViewController {

@IBOutlet weak var fldTotalUnits: UITextField!

var intTotalUnits:Int? = Int(fldTotalUnits)

这里的错误是“不能在属性初始化程序中使用实例成员 'fldTotalUnits';...” 我尝试用 let 替换 var,我尝试了 NSString,我尝试了 .toInt(),但没有成功……那我该怎么做呢?

【问题讨论】:

标签: swift string text int


【解决方案1】:

StringInt 的转换并不复杂。您只是在错误的地方进行转换。您试图在另一个成员的初始化中引用一个成员,这是不允许的。在这种特殊情况下,只是因为fldTotalUnits 的值是nil,而您会尝试通过Int(fldTotalUnits) 使用它。创建类的实例时,ViewController fldTotalUnits 设置为 nil 并稍后使用有用的值进行初始化。因此,您首先要做的就是将该行移到一个单独的方法中:

func doSomething() {
    var intTotalUnits:Int? = Int(fldTotalUnits)
}

现在您将看到编译器抱怨没有合适的初始化程序,因为您必须访问 fldTotalUnitstext 属性而不是使用实际的文本字段:

func doSomething() {
    var intTotalUnits:Int? = Int(fldTotalUnits.text!)
}

现在您可以考虑将intTotalUnits 的声明移至其他位置,但设置其值必须在some 方法中进行。

【讨论】:

  • 你说得对!我必须将转换放在一个函数中并添加那个.text!哦,天哪!你刚刚解决了我的问题,这让我痛苦了好几个小时。我爱你,谢谢你还活着!!!
  • var intTotalUnits: Int { return Int(fldTotalUnits.text!) ?? 0}
  • @LeoDabus 是的,当然。已经有一个答案以某种方式被否决并被删除 - 我想解释这里出了什么问题,因为 OP 一开始就感到困惑。
  • 如果我可能会问,那些在函数内部声明的变量是否可以在整个程序中访问?
  • 函数内部声明的变量只能在函数内部访问
【解决方案2】:

您问题中的代码试图从UITextField 创建Int,而不是String。你应该说的是……

var intTotalUnits:Int?


func updateTotalUnits()
    guard let text = fldTotalUnits.text else { return }

    intTotalUnits = Int(text)    
}

【讨论】:

  • 但是如果 OP 用你的代码替换他的语句它仍然无法编译,他必须另外把它放在一个单独的函数中。
  • 好吧,我希望OP不要只是复制我的代码而不考虑它!
  • 它表示一行上的连续 decarations 必须用 ';' 分隔(分号)和另一个显示“预期声明”的错误
  • 哦,我猜他做到了!
  • Tadaaa :D 显然 OP 不知道将该代码放在哪里。编译器消息没有抱怨 text 是有原因的,它首先关心的是 sn-p 的实际位置。
猜你喜欢
  • 2014-08-01
  • 2017-03-19
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
相关资源
最近更新 更多