我对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
?
答案 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)")
}
toInt
和numberFromString
返回选项。如果字符串无法转换为数字,则会返回nil
。
答案 3 :(得分:1)
var numberFormatter:NSNumberFormatter = NSNumberFormatter()
numberFormatter.usesGroupingSeparator = true
numberFormatter.groupingSeparator = ",";
numberFormatter.groupingSize = 3;
var number:String? = numberFormatter.stringFromNumber(numberFormatter.numberFromString("15487787878787")!)