Swift'i Swift'te String'e Dönüştür


554

Swift'in Intiçine nasıl atılacağını anlamaya çalışıyorum String.

Kullanarak bir çözüm buluyorum NSNumberama hepsini Swift'te nasıl yapacağımı anlamak isterim.

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

Yanıtlar:


961

Dönüştürme Intiçin String:

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

Ve tersi - dönüştürme Stringiçin Int:

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

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

Veya Swift 2 veya 3 kullanıyorsanız:

let x: Int? = Int(myString)

2
Bu çalışırken, toStringaşağıdaki cevapta gösterilen işlevi kullanın .
ybakos

2
InttoString()en azından Xcode 6.2 düzenleme değil bir yöntem var gibi görünüyor : Global bir toStringyöntem ( değil Int.toString() ) olduğunu görüyorum , kimse String()yapıcı kullanma avantajı biliyor musunuz ?
Nilloc

Not olduğu String(Int?)yazıyor "İsteğe Bağlı (Int)", Swift 2, en az ne anlama geldiğini olamayacağı. Bunun yerine kullanınInt?.description
Teejay

Harika, ama benim için çalışmıyor. Ben isteğe bağlı bir Int var ve String (myInt) derlemek alışkanlık - "Int? String dönüştürülemez" iddia ediyor. Benim için hiçbir toString () veya toInt () yöntemi yok veya stringValue ve intValue yok. Hatta bir String (myInt!) Bile, başlatıcısının String (örneğin: myInt!) Gibi bir adla yeniden adlandırıldığını söyleyecektir.
Motti Shneor

9
Swift 4 için aşağıdaki Hamed Gh'in cevabına bakınız. Doğru kullanımString(describing: x)
David Gay

92

Aşağıdaki Cevabı Kontrol Edin:

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

45
meh, bu Stringzaten bir yapıcı kabul ettiğinde çirkin ve gereksiz bir çözümInt
Gabriele Petronella

3
bunu ne yanlış buluyorsun neden oy verdiniz? GabrielePetronella
PREMKUMAR

2
istenen sonucu elde etmenin korkunç bir yolu. Ancak cevap teknik olarak doğrudur ve bu nedenle aşağı inmedim.
Gabriele Petronella

Bazı ayrıştırma araçlarının dize enterpolasyonunu iyi işlemeyebilmesi dışında bunun özellikle çirkin olduğunu düşünmüyorum. Aksi takdirde, kim bilir - daha hızlı olabilir. Javascript'te "" + x kullanmak genellikle bir String yapıcısı kullanmaktan daha hızlıdır. Bu örnek sadece birkaç karakter daha kısadır, ancak çeşitli değişkenlerden bir cümle oluşturduğunuz durumlarda kesinlikle dize enterpolasyonunu tercih ederim.
destY

1
Bu cevabı sadece çirkin olduğu için aşağılamak istemem ama @GabrielePetronella'nın dediği gibi, Stringkabul eden bir kurucu olduğunda dize enterpolasyonunu kullanmaya gerek yok Int. Çok daha açık ve özlü.
Isuru

58

İşte 4 yöntem:

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

Bazı insanların ss ile ilgili bir sorunu olacağını hayal edebiliyorum. Ancak, başka içerikler içeren bir dize oluşturmak istiyorsanız, neden olmasın.


5
Swift ve iOS 8'deki bazı yeni Stanford U kursunu izliyorum. Örneğiniz var ss = "\(x)", bir çifti bir dizeye dönüştürmeyi tam olarak nasıl tavsiye ettikleri. Hangi kolay ve harika olduğunu düşündüm.
markhunte

Ve sass hakkında daha fazla düşünmek - bu gerçekten kötü.
Ian Bradbury

2
toString, String olarak değiştirildi
Jirson Tavera

1
s artık (Swift 3.1) Dize (tanımlayan: x) eski sözdizimi derleyici hatası veriyor.
Motti Shneor

3
@MottiShneor Hayır, bu yanlış. String(describing:)hata ayıklama dışında hiçbir şey için asla kullanılmamalıdır. Normal String başlatıcısı değildir.
Eric Aya

55

Swift 3.0'da :

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

7
Bu yanlış. String(describing:)hata ayıklama dışında hiçbir şey için asla kullanılmamalıdır. Normal String başlatıcısı değildir.
Eric Aya

Swift 5'te bu hala yanlış mı? @ayaio, belgelere dayanarak yanlış görünmüyor
Zonily Jame

27

Hızlı 4 :

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

Developer.Apple.com> Dize> init (tanımlayan :)

Dize (açıklayan :) başlatıcısı, herhangi bir türdeki bir örneği bir dizeye dönüştürmenin tercih edilen yoludur.

Özel Dize Dönüştürülebilir

resim açıklamasını buraya girin


3
sonuç İsteğe bağlı (1)
Harshil Kotecha

11
Bu yanlış. String(describing:)hata ayıklama dışında hiçbir şey için asla kullanılmamalıdır. Normal String başlatıcısı değildir.
Eric Aya

3
Hamed Gh, Morithz zaten aynı soruya doğru cevap veriyor Cevabımı kontrol et Sadece normal String () başlatıcıyı kullanın. Ama önce isteğe bağlı bir paket açmayın. Veya örneğinizde olduğu gibi ?? kullanın. Bunun gibi: let str = String (x ?? 0)
Harshil Kotecha

2
@HamedGh Kendinize verdiğiniz bağlantıdaki örneklere bakın. describingYöntemi ... etmek için burada tarif içeriği. Bir açıklama verir. Bazen dönüşümle aynı, bazen değil . Bir isteğe bağlı verin describingve sonucu göreceksiniz ... Bu bir dönüşüm olmayacak. Dönüştürmenin basit ve özel bir yolu var: diğer cevaplarda açıklandığı gibi normal String başlatıcısını kullanma. Bağlantı verdiğiniz sayfanın tamamını okuyun: bu yöntemin farklı yollar kullanarak açıklama aradığını , doğru dönüşüm
Eric Aya

2
Bu cevabın açıklayıcı kısmını gerçekten kaldırmalısınız. Dönüştürme, String yapıcısında herhangi bir parametre adı kullanılmadan yapılmalıdır.
TimTwoToes

26

Sadece bütünlük için şunları da kullanabilirsiniz:

let x = 10.description

veya açıklamayı destekleyen başka bir değer.


5
Etiketteki değeri göstermeye çalışırken bu benim için çalıştı. Diğer yaklaşımlarla her zaman 0 yerine İsteğe bağlı (0) oldu. Teşekkür ederim
Hardcore_Graverobber

11

Hızlı 4:

İsteğe bağlı () sözcüğü olmayan etiketteki değeri göstermeye çalışıyorum .

burada x bir Int değeridir.

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

3
Hayır String(describing:). Hata ayıklama dışında hiçbir şey için asla kullanılmamalıdır. Normal String başlatıcısı değildir.
Eric Aya

Merhaba @ Moritz yani isteğe bağlı kelime kaldırmak için ne yapabilirim? bir Int değeri var ve daha etiket yazdırmak istiyorum
Harshil Kotecha

Sadece normal String()başlatıcıyı kullanın . Ama önce isteğe bağlı bir paket açmayın. Veya örneğinizde olduğu gibi kullanın ??. let str = String(x ?? 0)
Eric Aya


Çoğunlukla hata ayıklama amaçlıdır. Sınıfların adını tanımlayabilir, örneklerin açıklamasını vb. Alabilirsiniz. Ancak, uygulamanın kendisinde kullanılan dizeler için asla kullanılmamalıdır.
Eric Aya

8

Gelecekte zamandan ve güçlükten tasarruf etmek için bir Int uzantısı yapabilirsiniz. Genellikle ben uzantıları, numaralandırmalar ve diğer eğlenceli şeyler koymak paylaşılan bir kod dosyası oluşturmak. Uzantı kodu şöyle görünür:

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

Daha sonra bir int'i bir dizeye dönüştürmek istediğinizde sadece şöyle bir şey yapabilirsiniz:

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

Potansiyel olarak aptalca bir soru, ama bu bir fonksiyon mu yoksa hesaplanmış bir değişken mi olmalı? Swift'in bu durumlarda normalde hangisini kullandığını hatırlayamıyorum - toIntya da öyle toInt().
Maury Markowitz

1
Biraz zaman ve güçlük kazanmak için sadece kullanın myNumber.description. Herhangi bir uzantıya gerek yok.
nyg

8

içinde Swift 3.0 Bu biz dönüştürebilirsiniz nasıl Intüzere Stringve StringhiçInt

//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
Kodun son satırında neden sonunda bir ünlem işaretine ihtiyacımız var?
Omar Tariq

@OmarTariq, çünkü derleyiciye integerValuetürünün olduğunu açıkça söylüyoruz Int. o zaman bunun için sıfır değeri olamaz. derleyici onu açmanızı söyler. Bundan kaçınmak istiyorsanız, bunu kullanın let integerValue = Int(stringValue). o zaman bir sorun olmaz. geç cevap verdiğim için özür dilerim.
Chanaka Caldera

1
@OmarTariq Bu durumda paketin açılması gerçekten kötü olabilir. Dize bir sayı değilse uygulamanız çökecektir. Gerçekten geçerli olup olmadığını kontrol etmeli ve açmaya zorlamamalısınız.
Charlie Fish

7

her ne sebeple olursa olsun kabul edilen cevap benim için çalışmadı. Bu yaklaşımla gittim:

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

5

Bunu yapmanın birden çok yolu:

var str1:String="\(23)"
var str2:String=String(format:"%d",234)

4

Hızlı 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)

2

bu basit yaklaşımı kullanıyorum

Int dizesi:

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

ve Int'den String'e:

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

2

Unicode Int'yi Dizeye Dönüştür

Bir Int'i bir Unicode dizesine dönüştürmek isteyenler için aşağıdakileri yapabilirsiniz:

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

Veya alternatif olarak:

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

@jvarela, Bu hala işe yarıyor. Sadece Xcode 8.2'de (Swift 3.0.2) tekrar test ettim. StringBaşlatıcı bir alabilir UnicodeScalar.
17'de Suragch


0

String'i Int'ye dönüştürmek için

var numberA = Int("10")

Print(numberA) // It will print 10

Int'yi String'e dönüştürmek için

var numberA = 10

1. yol)

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

2. yol)

var strSomeNumber = String(numberA)

veya

var strSomeNumber = "\(numberA)"


0

Hızlı 3.0'da, tamsayıyı dizeye aşağıdaki gibi değiştirebilirsiniz

let a:String = String(stringInterpolationSegment: 15)

Başka bir yol

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

// veya 15 yerine herhangi bir tam sayı


1
API referansından "Bu başlatıcıyı doğrudan çağırma. Dize enterpolasyonlarını yorumlarken derleyici tarafından kullanılır." Bir yerde kullanıp kullanmadığınızı iki kez kontrol etmek isteyebilirsiniz.
Rahul Sharma

0

String Interpolation kullanmayı tercih ederim

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

Her nesnenin bir dize temsili vardır. Bu işleri kolaylaştırır. Örneğin String, birden fazla değere sahip bir tane oluşturmanız gerekiyorsa . Ayrıca içinde herhangi bir matematik yapabilir veya bazı koşulları kullanabilirsiniz

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

0

Hızlı uzantıyı seviyorsanız, aşağıdaki kodu ekleyebilirsiniz

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

daha sonra, az önce eklediğiniz yöntemle dize alabilirsiniz

var x = 1234
var s = x.string


-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.