繁体   English   中英

在Swift 2,Xcode 7 beta中,如何使用if let-toInt无法将可选文本输入转换为Int

[英]How do you convert optional text input to Int in Swift 2, Xcode 7 beta using if let - toInt does not work

我在将可选输入String转换为Int以便对其进行计算时遇到麻烦。

let odoField = UITextField() // allows entry of text to iOS field
odoField.text = "12500" // simulated input
let odoString = odoField.text

// now here is where I get trouble...

if let odoInt = odoString.toInt() {
    distance = Double(odoInt)
}

显然,toInt后缀不再是Swift的一部分。 我尝试了以下方法:

if let odoInt = Int(odoString)() {

但随后出现错误“可选类型的字符串?未解包”并提出了一个建议! 或?,如:

if let odoInt = Int(odoString!)() {

但是然后我仍然得到有关解包的欧元,建议我再添加一个!,然后在执行此操作时,我摆脱了括号的另一个错误,如下所示:

if let odoInt = Int(odoString!)! {

然后出现另一个错误,“用于条件绑定的初始化程序必须具有可选类型,而不是'Int'。”

我正在尝试在此处创建条件展开。

救命!

首先要了解的是,UITextField.text返回一个可选字符串,因此在您的代码中, odoStringString?类型的String? 另外,请记住, Int构造函数采用String而不是String? 所以你必须解开String? 才能使用它。 只是放一个! 如果odoStringnil则该变量(如Int(odoString!) )之后将使您的应用程序崩溃。 更好的是这样的:

if let s = odoString, odoInt = Int(s) {
    // odoInt is of type Int. It is guaranteed to have a value in this block
}

我已经测试了Daniel T的答案,并且有效。

我有一种情况,我想将文本字段的结果作为可选的Int返回。 您可以使用以下代码将其扩展为涵盖您的情况:

let odoInt = odoField.text != nil ? Int(odoField.text!) : nil
if let odoInt = odoInt {
    // Use unwrapped odoInt here
}

对于更紧凑的解决方案,另一种选择是使用flatMap:

let number = odoString.flatMap { Double($0) } ?? 0.0

实际上,看来Swift 2(Xcode 7 beta 6)的答案比上面的答案要简单。 当执行以下操作时,代码不会阻塞odoString的nil值:

if let odoInt = Int(odoString!) {
    distance = Double(odoInt)
}

因此,我推测,除非有更深的了解,否则编译器确实将其视为“如果语句为True(右侧有效),则定义并初始化变量,然后继续执行”。 我欢迎进一步的反馈。 这确实不必要了上面建议的许多额外代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM