SwiftでIntをStringに変換します


554

私はキャストする方法を考え出そうとしています IntStringスウィフトに。

私は回避策を見つけて使用NSNumberしていますが、Swiftでそれをすべて行う方法を見つけたいです。

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue

回答:


961

変換IntString

let x : Int = 42
var myString = String(x)

そして逆に-に変換StringするInt

let myString : String = "42"
let x: Int? = myString.toInt()

if (x != nil) {
    // Successfully converted String to Int
}

または、Swift 2または3を使用している場合:

let x: Int? = Int(myString)

2
これがtoString機能している間、以下の回答に示す関数を使用します。
ybakos 2015年

2
InttoString()少なくともXcode 6.2の編集ではメソッドがないようです:グローバルtoStringメソッド(でない Int.toString())があるようString()ですが、コンストラクタを使用するよりも利点は誰でも知っていますか?
Nilloc

String(Int?)少なくともSwift 2では「Optional(Int)」と書いていることに注意してください。これは、意図したとおりではありませんでした。代わりに使用してくださいInt?.description
Teejay

素晴らしいですが、私にはうまくいきません。オプションのIntがあり、String(myInt)はコンパイルされません-「Int?はStringに変換できません」と表示されます。toString()やtoInt()のいずれのメソッドも利用できないか、stringValueとintValueがありません。String(myInt!)でも、イニシャライザの名前がString(describing:myInt!)のような名前に変更されたことがわかります。
Motti Shneor 2017年

9
Swift 4については、以下のHamed Ghの回答を参照してください。正しい使用方法はあるString(describing: x)
デヴィッド・ゲイ

92

以下の答えを確認してください:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)

45
ええと、これはString既にコンストラクタを受け入れている場合、醜く不必要な回避策ですInt
Gabriele Petronella

3
あなたはこれを何が間違っていると思いますか?なぜ投票を下したのですか?@GabrielePetronella
PREMKUMAR

2
それは望ましい結果を達成するためのひどい方法に過ぎません。しかし、答えは技術的には正しいので、私は反対票を投じませんでした。
Gabriele Petronella 2014年

一部の解析ツールが文字列の補間を適切に処理できない場合を除いて、これは特に醜いとは思わない。そうでなければ、誰が知っているか-それはより速いかもしれません。たとえば、JavaScriptで "" + xを使用すると、Stringコンストラクタを使用するよりも高速です。この例では数文字短いだけですが、いくつかの変数から文を構成する場合は、文字列の補間を使用することをお勧めします。
Desty、2014年

1
醜いからといってこの回答に反対票を投じることはありませんが、@ GabrielePetronellaが言ったように、Stringを受け入れるコンストラクタがある場合は文字列補間を使用する必要はありませんInt。そのはるかに明確かつ簡潔です。
Isuru

58

ここに4つの方法があります:

var x = 34
var s = String(x)
var ss = "\(x)"
var sss = toString(x)
var ssss = x.description

ssで問題が発生する人もいると思います。しかし、他のコンテンツを含む文字列を作成することを検討しているのであれば、それはなぜでしょうか。


5
私はSwiftとiOS 8に関するスタンフォード大学の新しいコースのいくつかを見ているだけです。あなたのvar ss = "\(x)"例は、彼らがdoubleを文字列に変換することを忠告した方法です。簡単で素晴らしいと思いました。
markhunte 2015年

そして、sassについてもっと考える-それは本当に悪いことです。
Ian Bradbury

2
toStringはStringに名前が変更されました
Jirson Tavera

1
sが(Swift 3.1)String(describing:x)になりました。古い構文ではコンパイラエラーが発生します。
Motti Shneor 2017年

3
@MottiShneorいいえ、これは間違っています。String(describing:)デバッグ以外には使用しないでください。通常の文字列初期化子ではありません。
エリックアヤ

55

Swift 3.0の場合

var value: Int = 10
var string = String(describing: value)

7
これは間違っています。String(describing:)デバッグ以外には使用しないでください。通常の文字列初期化子ではありません。
Eric Aya

これはSwift 5でもまだ間違っていますか?@ayaio、ドキュメントからの根拠は間違いないようです
Zonily Jame

27

Swift 4

let x:Int = 45
let str:String = String(describing: x)

Developer.Apple.com>文字列> init(説明:)

String(describing :)イニシャライザは、任意のタイプのインスタンスを文字列に変換するための推奨される方法です。

カスタム文字列コンバーチブル

ここに画像の説明を入力してください


3
結果オプション(1)
Harshil Kotecha 2018

11
これは間違っています。String(describing:)デバッグ以外には使用しないでください。通常の文字列初期化子ではありません。
Eric Aya

3
Hamed Gh、Morithzはすでに同じ質問で正しい回答を提供しています。私の回答を確認してください。通常のString()イニシャライザを使用してください。ただし、オプションを指定しないで、最初にアンラップしてください。または、例のように??を使用します。このようにしてみましょう:str = String(x ?? 0)
Harshil Kotecha 2018

2
@HamedGh自分で指定したリンクの例を見てください。describingこの方法では...と、ここで記述し、その内容を。説明を与えます。変換と同じ場合もあれば、そうでない場合もあります。オプションをに与えるdescribingと、結果が表示されます...変換にはなりません。他の回答で説明されているように、変換にはシンプルで専用の方法があります。通常のString初期化子を使用します。あなたにリンクしていること、完全なページを読むためにこの方法を検索していることがわかり説明さまざまな方法を使って、あなたが正確な変換を期待している場合、そのうちのいくつかが間違った結果を与えるだろう...
エリック綾

2
あなたは本当にこの答えの説明部分を削除する必要があります。Stringコンストラクターでパラメーター名を使用せずに変換を行う必要があります。
TimTwoToes

26

完全を期すために、次のものも使用できます。

let x = 10.description

または説明をサポートするその他の値。


5
これは、ラベルに値を表示しようとするときに私に役立ちました。他のアプローチでは、0ではなく常にOptional(0)でした。ありがとう
Hardcore_Graverobber

11

スウィフト4:

Optional()ワードなしでラベルに値を表示しようとしています。

ここで、xはInt値を使用しています。

let str:String = String(x ?? 0)

3
いいえString(describing:)。デバッグ以外には使用しないでください。通常の文字列初期化子ではありません。
Eric Aya

@モリッツこんにちは、オプションの単語を削除するにはどうすればよいですか?Int値があり、ラベルに印刷したい
Harshil Kotecha 2018

通常のString()イニシャライザを使用するだけです。ただし、オプションを指定しないで、最初にアンラップしてください。または、例のように、を使用します??。このように:let str = String(x ?? 0)
エリックアヤ

developer.apple.com/documentation/swift/string/2427941-init 私は記述の使用であり、どのようなあなたのポイントを理解する
Harshil Kotecha

主にデバッグを目的としています。クラスの名前を記述したり、インスタンスの説明を取得したりできます。ただし、アプリ自体で使用される文字列には使用しないでください。
エリックアヤ

8

時間と手間を省くために、Int拡張機能を作成できます。通常は、拡張機能、列挙型、その他の楽しいものを配置する共有コードファイルを作成します。拡張コードは次のようになります。

extension Int
{
    func toString() -> String
    {
        var myString = String(self)
        return myString
    }
}

その後、intを文字列に変換する場合は、次のようにすることができます。

var myNumber = 0
var myNumberAsString = myNumber.toString()

潜在的に愚かな質問ですが、これは関数か、計算された変数でしょうか?それがある-私は1つスウィフトは、通常これらの場合に使用します思い出すことができませんtoInttoInt()
Maury Markowitz、2016

1
時間と手間を省くには、を使用してくださいmyNumber.description。拡張機能は必要ありません。
nyg 2017

8

SWIFT 3.0これは、我々は変換することができますどのようにIntするStringStringInt

//convert Integer to String in Swift 3.0

let theIntegerValue :Int = 123  // this can be var also
let theStringValue :String = String(theIntegerValue)


//convert String to Integere in Swift 3.0


let stringValue : String = "123"
let integerValue : Int = Int(stringValue)!

1
コードの最終行で、なぜ最後に感嘆符が必要なのですか?
Omar Tariq

@OmarTariq 。コンパイラintegerValueの型がであることをコンパイラに明示的に通知するためInt。そのため、nil値をとることはできません。だからコンパイラはそれをアンラップするように指示します。これを避けたい場合は、次のように使用してくださいlet integerValue = Int(stringValue)。その後、問題は発生しません。返事が遅れて申し訳ありません。
チャナカカルデラ2017

1
この場合の@OmarTariqアンラップは本当に悪い場合があります。文字列が数値でない場合、アプリケーションがクラッシュします。これが有効であることを確認し、強制的にアンラップしないでください。
Charlie Fish

7

何らかの理由で、受け入れられた答えは私にとってうまくいきませんでした。私はこのアプローチで行きました:

var myInt:Int = 10
var myString:String = toString(myInt)



2

この単純なアプローチを使用するIAM

Intへの文字列:

 var a = Int()
var string1 = String("1")
a = string1.toInt()

そしてIntからStringへ:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"

2

Unicode Intを文字列に変換

IntをUnicode文字列に変換したい場合は、次の操作を実行できます。

let myInteger: Int = 97

// convert Int to a valid UnicodeScalar
guard let myUnicodeScalar = UnicodeScalar(myInteger) else {
    return ""
}

// convert UnicodeScalar to String
let myString = String(myUnicodeScalar)

// results
print(myString) // a

または代わりに:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) {
    let myString = String(myUnicodeScalar)
}

@jvarela、これはまだ機能します。Xcode 8.2(Swift 3.0.2)で再テストしました。String初期化子を取ることができますUnicodeScalar
Suragch 2017年


0

文字列をIntに変換するには

var numberA = Int("10")

Print(numberA) // It will print 10

Intを文字列に変換するには

var numberA = 10

最初の方法)

print("numberA is \(numberA)") // It will print 10

2番目の方法)

var strSomeNumber = String(numberA)

または

var strSomeNumber = "\(numberA)"


0

Swift 3.0では、以下のように整数を文字列に変更できます

let a:String = String(stringInterpolationSegment: 15)

別の方法は

let number: Int = 15
let _numberInStringFormate: String = String(number)

//または15の代わりに任意の整数


1
APIリファレンスから「このイニシャライザを直接呼び出さないでください。文字列補間を解釈するときにコンパイラによって使用されます。」どこかで使用しているかどうかを再確認したいと思うかもしれません。
Rahul Sharma 2017年

0

文字列補間を使用したい

let x = 45
let string = "\(x)"

各オブジェクトには文字列表現があります。これは物事をより簡単にします。たとえばString、複数の値を持ついくつかを作成する必要がある場合。また、その中で任意の数学を実行したり、いくつかの条件を使用したりできます

let text = "\(count) \(count > 1 ? "items" : "item") in the cart. Sum: $\(sum + shippingPrice)"

0

迅速な拡張が好きなら、次のコードを追加できます

extension Int
{
    var string:String {
        get {
            return String(self)
        }
    }
}

次に、追加したメソッドで文字列を取得できます

var x = 1234
var s = x.string


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