文字列から整数値を迅速に取得する


134

だから私はこれを行うことができます:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

しかし、私はそれを行う方法を見つけることができませんString。私は次のようなことをしたいと思います:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

これも機能しません:

var someNumbAlt: Int = myString.integerValue

1
var someNumb: Int? = Int(stringNumb)またはvar someNumb = Int(stringNumb)
SwiftArchitect 2016

回答:


179

Swift 2.0では、コンストラクターを使用してIntegerを初期化できます

var stringNumber = "1234"
var numberFromString = Int(stringNumber)

14
Swift 2.0以降toInt()、の一部としてこのメソッドは使用できなくなりましたString。したがって、このIntコンストラクタは、文字列をintに変換する唯一の方法です。
モーガンワイルド

1
セミコロンは必要ありません
セバスチャン

ユーザーがテキストフィールドにInt64制限数を超える数を入力した場合の処理​​方法を教えてください
Khushboo Dhote

1
@セバスチャンはそんなにイライラしませんか?:)
ビクター

94

私は使用します:

var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)

toInt()

文字列がIntに収まる整数を表す場合、対応する整数を返します。


5
これは機能しましたが、varを明示的に宣言する場合は、感嘆符を追加する必要があります。var someNumb: Int = stringNumber.toInt()!@ NateCookが指摘したように
Logan

私はそれを明示的に宣言していません。コンパイラーは、numberFromStringが1として初期化されているため、intがintであることを認識しています...
CW0007007

私はあなたがそうではないことを知っていますが、私はそうです。私はそうするためにその調整をしなければなりませんでした。あなたのコードは正しいです、それをコメントとして追加するだけです。
Logan

はい、ノートが指摘するように値がIntに収まる場合にのみ値を返します。それ以外の場合は、nil ...を返します
CW0007007

5
!呼び出しを行う代わりに、変数をオプションとして宣言できますsomeNumb: Int? = stringNumber.toInt()。次に、タイプセーフティシステムはfoo存在しない可能性があることを認識します。!もちろん、文字列が数値に変換できない場合、パッティングはクラッシュします。
gwcoffey 2014年

18

Swift 3.0の場合

タイプ1:NSStringを文字列に変換

    let stringNumb:NSString = "1357"
    let someNumb = Int(stringNumb as String) // 1357 as integer

タイプ2:文字列に整数のみがある場合

    let stringNumb = "1357"
    let someNumb = Int(stringNumb) // 1357 as integer

タイプ3:文字列にFloat値がある場合

    let stringNumb = "13.57"
    if let stringToFloat = Float(stringNumb){
        let someNumb = Int(stringToFloat)// 13 as Integer
    }else{
       //do something if the stringNumb not have digit only. (i.e.,) let stringNumb = "13er4"
    }

「タイプ3」のコードは理想的ではありません。stringToFloatis をチェックする代わりに!= nil、を使用する必要がありますif let
rmaddy 2017

11

必要なメソッドはtoInt()- toInt()はオプションのIntを返すため、少し注意する必要があります。

let stringNumber = "1234"
let numberFromString = stringNumber.toInt()
// numberFromString is of type Int? with value 1234

let notANumber = "Uh oh"
let wontBeANumber = notANumber.toInt()
// wontBeANumber is of type Int? with value nil

しかし、同様に、toInt()それを行う正しい方法です。オプションは言語の中核部分です
ジャアロ

もちろん、まっすぐなIntではなく、オプションで作業していることに注意する必要があります。
ネイト・クック

5

あなただけが使用できる場合NSString

これは、objective-cによく似ています。すべてのデータ型がありますが、as NSString追加が必要です

    var x = "400.0" as NSString 

    x.floatValue //string to float
    x.doubleValue // to double
    x.boolValue // to bool
    x.integerValue // to integer
    x.intValue // to int

また、toInt()Apple Inc.の「Swiftプログラミング言語」を参照してください。iBooks。https://itun.es/us/jEUH0.l 49ページ

x.toInt()

を追加するのを忘れましたas NSString。修正しました@gwcoffey
John Riselvato 2014年

2
NSStringを使いたくありません。質問を参照してください。
Logan

4

上記の答えは私の文字列値が「700.00」だったので私を助けませんでした

スウィフト2.2これは私の作品

let myString = "700.00"
let myInt = (myString as NSString).integerValue

myIntをNSFormatterClassに渡しました

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is700

このブログ投稿に感謝します。


1
この質問は、文字列から整数を取得することについてです。あなたの場合、あなたはIntを持っていません、あなたはDoubleを持っています。SwiftではDouble()、と同じように使用しInt()ます。NSStringへのブリッジを使用する必要はありません。
Eric Aya

ねえ、あなたの提案に感謝を@EricDが、「私は整数を望んでいた 私は、通貨コンバータ用NSNumberFormatterクラスにのIntを渡していて」。
swiftBoy

1
この場合は、を使用してDouble() からを使用できますInt()。次のように:if let d = Double("700.00") { let i = Int(d); print (i) }:)
Eric Aya

2

次のように、StringからNSStringにブリッジし、CIntからIntに変換できます。

var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)

1

そのための拡張機能を書きました。常にを返しますInt。文字列がに収まらない場合はInt、0が返されます。

extension String {
    func toTypeSafeInt() -> Int {
        if let safeInt = self.toInt() {
            return safeInt
        } else {
            return 0
        }
    }
}

2
これは、より簡潔に書くことができますreturn self.toInt() ?? 0。そのための拡張メソッドを用意するよりも、そのようにインラインで記述する方がおそらく良いでしょう。
jlong​​64 2015年

0

より一般的な解決策は拡張です

extension String {
    var toFloat:Float {
        return Float(self.bridgeToObjectiveC().floatValue)
    }
    var toDouble:Double {
        ....
    }
    ....
}

これは、たとえば、toFloatによって迅速なネイティブStringオブジェクトを拡張します


0

Swift 2.0で文字列をIntに変換します。

var str:NSString = Data as! NSString
var cont:Int = str.integerValue

使用する .intergerValue or intValue for Int32


0

8:1オッズ(*)

var stringNumb: String = "1357"
var someNumb = Int(stringNumb)

または

var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)

Int(String)Int?ではなく、オプションを返しますInt


安全な使用:明示的にアンラップしないでください

let unwrapped:Int = Int(stringNumb) ?? 0

または

if let stringNumb:Int = stringNumb { ... }

(*)なぜvar someNumb: Int = Int(stringNumb)うまくいかなかったのかについては、実際に回答したものはありませんでした。


@ user3441734ありがとうございます。私はキャスティングを使うべきではなかった。
SwiftArchitect 2016

0

シンプルだが汚い方法

// Swift 1.2
if let intValue = "42".toInt() {
    let number1 = NSNumber(integer:intValue)
}
// Swift 2.0
let number2 = Int(stringNumber)

// Using NSNumber
let number3 = NSNumber(float:("42.42" as NSString).floatValue)

延長方法

ロケールと小数でうまく動作するので、これは本当に良いです。

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.numberFromString(self)
    }
}

今、あなたは単に行うことができます:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.