2016-10-21 13 views
2

テキストフィールドから10進数を取得しようとしています。それは10進数にしかなりませんが、 'o、5'のようなものを入力すると、弾丸が0.5秒ごとよりも速く生成されます。テキストフィールドの10進数

マイコード:

@IBAction func enemyBulletDelayClick(_ sender: AnyObject) { 
    dismissKeyboard() 

    let correctNumber = enemyBulletDelayText.text?.replacingOccurrences(of: ",", with: ".") 
    enemyBulletDelay = Double(correctNumber!)! 
    enemyBulletDelayText.text = "" 
} 

(私は「」各変換てる小数のために「」。) そうでなければ、それは私にエラーを与えるだろう。

+2

'NSNumber'(その後' Double')にユーザが入力した進数に変換する適切な方法は、 'NSNumberFormatter' /' NumberFormatter'を使用することです。 – rmaddy

+1

これらのすべてを避けてください!彼らは起こるのを待っているクラッシュです。 – rmaddy

答えて

0

?あなたは包む必要はありません!

削除する方法はたくさんあります。その後。あなたが望むものを選んでください。これは、あなたがやっていることのプロセスにもっと焦点を当てて、NSNumberFormatterや何をしたいのかを決めることができます。

guard let enemyBulletDelayString = enemyBulletDelayText.text? else { 
    //put whatever you want to do here if this check doesn't pass 
    return 
} 

let numberFormatter = NumberFormatter() 
formatter.numberStyle = numberFormatter.Style.decimal 

if let formattedNumber = numberFormatter.number(from: enemyBulletDelayString) { 
    enemySpawnDelay = formattedNumber.doubleValue 
} else { 
    numberFormatter.decimalSeparator = "," 
    if let formattedNumber = numberFormatter.number(from: enemyBulletDelayString) { 
    enemySpawnDelay = formattedNumber.doubleValue 
    } 
} 

これは、実行する必要があります。

+0

両方の小数点区切り文字を試してみる理由はほとんどありません。特定のロケールのユーザーは、通常の形式で数字を入力するだけです。これは小数点キーパッドが使用されている場合に役立ち、適切なセパレータのみが表示されます。 – rmaddy

+0

お手伝いいただきありがとうございます。私がこれを使用すると、テキストフィールドの数値の代わりに常に0.0が与えられます。 –

+0

私のvar enemyBulletDelay変数を削除するには、例としてそこに配置しました。 enemySpawnDelay変数が既にあるようですので、その変数をformattedNumber.doubleValueに設定してください。 –

0

このコードを使用しようとしましたが、機能しました。

コード:

let formatter = NumberFormatter() 
formatter.numberStyle = NumberFormatter.Style.decimal 

enemySpawnDelay = (formatter.number(from: enemySpawnDelayText.text!)?.doubleValue)!