簡體   English   中英

如何將NSString轉換為Int?

[英]How can I convert an NSString to an Int?

我對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

您的代碼存在一些問題,但要回答手頭的問題,問題在於您濫用可選項(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")
 }

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

例如:

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

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返回Optionals。 如果字符串無法轉換為數字,則返回nil

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM