如何将NSString转换为Int?

时间:2014-06-11 00:44:13

标签: ios cocoa nsstring swift

我对Apple编程完全不熟悉,但我认为Swift在阅读之后看起来很有趣。我试图在命令行上做一个简单的数字猜谜游戏,但我不能让它将整数转换为字符串。我试过很多方法来搜索互联网,但是我不知道出了什么问题。我不想直接接受用户的输入作为整数,我宁愿将它从字符串转换为整数,以便更容易处理错误(比如在Python中如何完成)。这就是我所做的:

import Foundation
// Get Input
let standardInput = NSFileHandle.fileHandleWithStandardInput()
// Convert to int function
func convertToInt(guess: String) -> Int {
    var num: Int = guess.toInt()! // It tells me "Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)" on this line and the program stops
    return num
}
println("Please enter your name.")
// Get the user's name
let data = standardInput.availableData
var name = NSString(data: data, encoding: NSASCIIStringEncoding)
println("Hello \(name)")
println("Please enter a number and I will try to guess it.")
// Get the user's number
let data2 = standardInput.availableData
var number = NSString(data: data2, encoding: NSASCIIStringEncoding)
// Call the function to convert the number to an int
var newnum = convertToInt(number)
println(newnum)

运行之后,它告诉我

fatal error: Can't unwrap Optional.None (lldb)

在调试区域中。我不知道如何解决这个问题。有没有办法将数字直接从NSString转换为Int

4 个答案:

答案 0 :(得分:2)

您的代码存在一些问题,但要回答手头的问题,问题在于您滥用可选项(wwdc的swift视频简介中介绍了这一点)。

toInt方法返回一个可选而不是Int。可选项是问题的答案:“如果我试图转换的字符串不是数字,应该返回什么?”尝试从不存在的字典中访问密钥也是如此。在objective-c世界中,我们返回nil,但在Swift中它是可选的。您需要做的是检查值是否返回,如果是,您可以使用它。例如

 if let number = guess.toInt() {
      //now we can do something with number because we know conversion worked
      println(number)
 } else {
      println("a number wasn't entered")
 }

答案 1 :(得分:2)

在Swift 2中,删除了toInt()方法。使用Int()方法。

例如:

var tempInt :Int  = Int("24")!

答案 2 :(得分:1)

toInt方法返回Optional。您应该在使用之前检查是否返回了值。

var name: String = NSString(string: "1234")
var integer:Int? = name.toInt()
if let integer = integer {
    println("\(integer)")
}

您还可以使用NSNumberFormatter从字符串中获取数字。请注意,这会返回NSNumber,但您可以轻松地将其转换为Swift Int

var numberFormatter = NSNumberFormatter()
var number:NSNumber? = numberFormatter.numberFromString("1234")
if let number = number {
    var integer = Int(number)
    println("\(integer)")
}

toIntnumberFromString返回选项。如果字符串无法转换为数字,则会返回nil

答案 3 :(得分:1)

 var numberFormatter:NSNumberFormatter = NSNumberFormatter()
    numberFormatter.usesGroupingSeparator = true
    numberFormatter.groupingSeparator = ",";
    numberFormatter.groupingSize = 3;
    var number:String? = numberFormatter.stringFromNumber(numberFormatter.numberFromString("15487787878787")!)