2015-09-30 63 views
0

基本上我得到的用戶輸入一個數字1-3,我想採取用戶輸入的號碼,並與隨機數進行比較。這是我的代碼:如何從字符串斯威夫特2.0獲得Int值

func input() -> String { 
    let keyboard = NSFileHandle.fileHandleWithStandardInput() 
    let inputData = keyboard.availableData 
    return NSString(data: inputData, encoding:NSUTF8StringEncoding) as!   String 
} 

var userInput = input() 
var userNumber: Int? = Int(userInput) 

當我嘗試打印userNumber返回「無」 什麼建議?謝謝!

+1

是什麼'userInput'得到輸出爲? –

+0

[從cocoa/foundation工具控制檯讀取輸入?]的可能的重複(http://stackoverflow.com/questions/869802/read-input-from-a-cocoa-foundation-tool-console) – jtbandes

回答

-1

試試這個

var userNumber: Int = userInput.toInt()! 
+0

問題是尋址Swift 2.0作爲'.toInt()'從'String'中移除。請參閱http://stackoverflow.com/a/30773127/5181636 – Caleb

0

這可能導致語法排序。將字符串解析爲int並且打印結果將比獲取用戶輸入更快。我建議你完成關閉,就像下面的代碼一樣。

inputTest({ 
    (result: String?) in 
    print("got back: \(result)") 
    var userNumber: Int? = Int(result!) 
    print(userNumber) 
}) 

func inputTest(completion: (result: String?) -> Void) { 
    let keyboard = NSFileHandle.fileHandleWithStandardInput() 
    let inputData = keyboard.availableData 

    completion(result: NSString(data: inputData, encoding:NSUTF8StringEncoding) as? String) 
} 
0

的初始化Int()基本上是正確的,但可能會返回nil因爲例如字母不能被轉換爲整數表示。所以你必須執行檢查

let userInput = "Hello" 
if let userInputInteger = Int(userInput) { 
    print("OK") 
    // do something with userInputInteger 
} else { 
    print("\(userInput) cannot be converted to integer") 
} 
1

我是荷蘭人,所以我的英語不是很好。對不起。
這是工作了答案:

import Foundation 

print("What is your age?") 
var fhcpy: NSData? = NSFileHandle.fileHandleWithStandardInput().availableData 

if let data = fhcpy{ 
    var str: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 
    var numstr: String = "" 
    for char in str.characters { 
     if Int("\(char)") != nil { 
      numstr.append(char) 
     } 
    } 
    var num: Int? = Int(numstr) 
    if let opNum = num { 
     print("Your age is \(opNum)") 
    } else { 
     print("That is not a valid number. ") 
    } 
} 

我如何做它
首先,我TRED雨燕1.0的方法,但確實導致了誤差(Get input in swift 1.0)。這是if let方法(Error handling)。之後,我製作了一個可選項fhcpy,其中NSDate的值爲fh.availbleData。其中解決了if let的問題。現在我們要獲得一個Int值(Get Int value)。現在我們用Int()來做到這一點,但每次都會返回nil。我們使用for來查看變量str中的內容。
代碼:

import Foundation 

print("What is your age?") 
var fhcpy: NSData? = NSFileHandle.fileHandleWithStandardInput().availableData 

if let data = fhcpy{ 
    var str: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 
    for char in str.characters { 
     print(char) 
    } 
    var num: Int? = Int(str) 
    print("Your age is \(num)") 
} 

輸出:

What is your age? 
12 
1 
2 


Your age is nil 
Program ended with exit code: 0 

你看到新行?因此,我們編程for,測試「如果字符串中的字符是IntCharacter將被附加到strnum」。最後,strnum被導出到Int

示例代碼:

import Foundation 

print("What is your name?") 
var fhcpy: NSData? = NSFileHandle.fileHandleWithStandardInput().availableData 

if let data = fhcpy{ 
    var str: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 

    print("Your name is \(str)") 
} 
+0

用於替代'fhcpy','fhad'(文件句柄可用數據)。這是更普遍的。 – DutchCraftMaster

+0

此外,「有效的答案」並不專門針對Int值。如果你輸入'#%@ 3!$#5',它會顯示:'你的年齡是35'。但是現在你知道在輸入後有一個''\ n「'。 – DutchCraftMaster

+0

「示例代碼」將顯示「\ n」。 – DutchCraftMaster