NSInteger'ı NSString veri tipine nasıl dönüştürebilirim?


137

İnsan nasıl dönüştürmek yapar NSIntegeriçin NSStringveri türü?

Aşağıdakileri denedim, burada ay bir NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];

Yanıtlar:


267

NSInteger'lar long, mevcut 64 bit mimarilerin tanımlarıyla eşleşmek için bunları nesnelemezsiniz;

NSString *inStr = [NSString stringWithFormat: @"%ld", (long)month];


11
Bunu denedim ama uyarı almaya devam ettim Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Bunun yerine Apple belgelerine göre gittimNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven

8
Yeni A7 yongası gibi 64 bit işlemcilerde, uygulamanız 64 bit için derlenmişse, bir NSInteger'ın aslında bir int değil, uzun olduğunu unutmayın. Oyuncuyu yapmak, (int) ay, genel durum için 64 bit platformlarda yıkıcı olacaktır. Yalnızca Apple platformlarını hedefliyorsanız, Aleksey Kozhevnikov'un cevabında olduğu gibi Objective-C yolunu veya hem int hem de uzun ile çalışacak benzer bir şeyi tercih edin - örneğin uzun ;-) İmzasız olsa da (negatif olmayan anlamına gelir) bir örnek Andreas'ta Ley'nin cevabı.
Louis St-Amour

1
@Steven Şu anki, daha uygulanabilir olanların yüzeye çıkmasını ve kabul edilmesini sağlamak için cevabı silmeye çalıştım, ancak görünüşe göre kabul edilen cevaplar silinemiyor. Bu nedenle, uyarıları tetiklemeyen hızlı bir çözüm arayan kişilere çok yararlı bilgiler sağlamak için en azından içeriğini ayarlamaya çalıştım.
luvieere

@luvieere Apple'ın belgeleri NSInteger'e biçim dizelerinde nasıl davranılacağını açıkça açıklıyor. Bu tavsiyeye uymak için cevabınızı güncellemelisiniz.
Nikolai Ruhe

2
[@(integerValue) stringValue]daha temiz bir yaklaşımdır.
Zorayr


76

Modern Amaç-C

An NSInteger, stringValuedeğişmez bir metinle bile kullanılabilecek bir yönteme sahiptir

NSString *integerAsString1 = [@12 stringValue];

NSInteger number = 13;
NSString *integerAsString2 = [@(number) stringValue];

Çok basit. Öyle değil mi?

hızlı

var integerAsString = String(integer)

8

%zd%tu32-bit ve 64-bit mimarilerde hiçbir döküm ve uyarı olmadan NSIntegers ( NSUInteger için) için çalışır . Bunun " önerilen yol " olmadığı konusunda hiçbir fikrim yok .

NSString *string = [NSString stringWithFormat:@"%zd", month];

Bunun neden işe yaradığını merak ediyorsanız bu soruya bakın .


5

Yapmanın kolay yolu:

NSInteger value = x;
NSString *string = [@(value) stringValue];

Burada @(value)verileni , gerekli işlevi çağırabileceğiniz NSIntegerbir NSNumbernesneye dönüştürür stringValue.


2

İçin destekle derlerken arm64, bu bir uyarı oluşturmaz:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];

2

Ayrıca deneyebilirsiniz:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];

0

Cevap verilir, ancak bazı durumlar için bunun NSInteger'den dize almanın ilginç bir yolu olacağını düşünün

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];

0

Bu durumda NSNumber sizin için iyi olabilir.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
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.