¿Cómo puedo convertir un NSString a un Int?

Soy completamente nuevo en la progtwigción de Apple, pero pensé que Swift parecía interesante después de leer sobre él. Estoy intentando hacer un simple juego de adivinar numbers en una command-line, pero no puedo lograr que convierta un integer a una cadena. He intentado search mucho en Internet por una forma de hacer esto, pero no tengo idea de lo que está mal. No quiero aceptar directamente la input del usuario como un integer, prefiero convertirlo de una cadena a un número integer para facilitar el event handling errores (como la forma en que se hace en Python). Esto es lo que hice:

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) 

Después de ejecutar esto, me dice

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

en el área de debugging. No tengo idea de cómo solucionar esto. ¿Hay alguna manera de convertir un número directamente de NSString a Int ?

hay varios problemas con su código, pero para responder a la pregunta en cuestión, el problema es el mal uso de los opcionales (que se trata en la introducción al video rápido de wwdc).

el método toInt devuelve un opcional y no un Int. Las opciones son la respuesta a la pregunta: "¿Qué pasa si la cadena que estoy tratando de convertir no es un número, qué debo devolver?" Lo mismo ocurre con intentar acceder a una key desde un dictionary que no está allí. En el mundo objective -c, regresamos a cero, pero en Swift es opcional. Lo que debe hacer es verificar si un valor volvió y, de ser así, puede usarlo. Por ejemplo

  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 entenetworking") } 

En Swift 2, se toInt() método toInt() . Utilice el método Int() .

Por ejemplo:

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

El método toInt devuelve un Opcional. Debe verificar que se haya devuelto un valor antes de utilizarlo.

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

También podría usar NSNumberFormatter para get un número de la cadena. Tenga en count que esto devuelve un NSNumber , pero puede NSNumber fácilmente a Swift Int .

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

toInt y numberFromString devuelven Optionals. Si la cadena no se puede convertir a un número, devolverá nil .

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