Apakah ada pintasan ke ( stringByAppendingString:
) rangkaian string di Objective-C, atau pintasan untuk bekerja NSString
secara umum?
Misalnya, saya ingin membuat:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
sesuatu yang lebih seperti:
string myString = "This";
string test = myString + " is just a test";
objective-c
nsstring
string-concatenation
typeoneerror
sumber
sumber
Jawaban:
Dua jawaban yang bisa saya pikirkan ... tidak ada yang menyenangkan seperti memiliki operator gabungan.
Pertama, gunakan
NSMutableString
, yang memilikiappendString
metode, menghapus beberapa kebutuhan untuk string temp tambahan.Kedua, gunakan a
NSArray
untuk menggabungkan melaluicomponentsJoinedByString
metode.sumber
[NSMutableString appendString]
lebih ramah memori daripada[NSString stringByAppendingStrings]
.[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
Teknik tampaknya yang paling elegan. Itu harus menjadi jawaban yang dipilih.Sebuah pilihan:
Pilihan lain:
Saya menduga Anda tidak puas dengan beberapa penambahan (a + b + c + d), yang dapat Anda lakukan:
menggunakan sesuatu seperti
sumber
Jika Anda memiliki 2 NSString literal , Anda juga dapat hanya melakukan ini:
Itu juga berguna untuk bergabung dengan #defines:
Nikmati.
sumber
@
s pada string setelah yang pertama.@"I" " really" " enjoy"...
NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";
tidak berhasil? Saya mengalamiExpected '@' in program
kesalahan :(TABLE_NAME
didefinisikan?Saya selalu kembali ke posting ini dan selalu memilah-milah jawaban untuk menemukan solusi sederhana ini yang bekerja dengan banyak variabel yang diperlukan:
Sebagai contoh:
sumber
Buat metode:
Kemudian, dalam fungsi apa pun yang Anda perlukan, atur string atau bidang teks Anda atau apa pun ke nilai balik fungsi ini.
Atau, untuk membuat jalan pintas, ubah NSString menjadi string C ++ dan gunakan tanda '+' di sana.
sumber
Yah, karena titik dua adalah jenis simbol khusus, tetapi merupakan bagian dari tanda tangan metode, dimungkinkan untuk memperluas
NSString
kategori with untuk menambahkan gaya penggabungan string non-idiomatis ini :Anda dapat mendefinisikan sebanyak mungkin argumen yang dipisahkan oleh titik dua yang bermanfaat ... ;-)
Untuk ukuran yang baik, saya juga menambahkan
concat:
argumen variabel yang mengambilnil
daftar string yang diakhiri.sumber
stringWithFormat:
. Belum lagi kurangnya parameter bernama yang tidak hanya non-standar tetapi juga membingungkan.stringByAppendingString
, dan dia tidak pernah mengatakan apa-apa tentang menggunakan lebih dari dua argumen. Saya suka jawaban ini lebih baik daripada yang diterima. Cukup pintar.Gunakan
stringByAppendingString:
cara ini:ATAU
sumber
Makro:
Kasus uji:
Makro alternatif: (jika Anda ingin menerapkan jumlah minimum argumen)
sumber
-[NSString stringByAppendingString:]
kasus penggunaan ini - dengan yang pertama Anda akan mendapatkan pengecualian jika argumennyanil
tetapi tidak jika penerima. Jadi kemungkinan 50% kemungkinan kesalahan pada pengumpan string Anda gagal diam-diam dan 50% pengecualian. DenganstringConcat
Anda dijamin pengecualian pada apa punnil
, di mana pun dalam daftar. Yang setidaknya lebih mudah diprediksi.Ketika membangun permintaan untuk layanan web, saya menemukan melakukan sesuatu seperti berikut ini sangat mudah dan membuat rangkaian dapat dibaca dalam Xcode:
sumber
Pintasan dengan membuat makro AppendString (AS) ...
catatan:
Jika menggunakan makro, tentu saja lakukan saja dengan argumen variadic, lihat jawaban EthanB.
sumber
sumber
Berikut cara sederhana, menggunakan sintaks literal array baru:
sumber
Setelah beberapa tahun sekarang dengan Objective CI pikir ini adalah cara terbaik untuk bekerja dengan Objective C untuk mencapai apa yang Anda coba capai.
Mulai memasukkan "N" di aplikasi Xcode Anda dan otomatis terisi menjadi "NSString". masukkan "str" dan lengkapi otomatis ke "stringByAppendingString". Jadi penekanan tombol sangat terbatas.
Setelah Anda terbiasa menekan tombol "@" dan menabrak proses penulisan kode yang dapat dibaca tidak lagi menjadi masalah. Ini hanya masalah adaptasi.
sumber
Satu-satunya cara untuk membuat
c = [a stringByAppendingString: b]
lebih pendek adalah menggunakan autocomplete di sekitarst
titik. The+
operator adalah bagian dari C, yang tidak tahu tentang Objective-C benda.sumber
#define
dapat digunakan untuk mempersingkatnya.Bagaimana dengan memperpendek
stringByAppendingString
dan menggunakan #define :Dengan demikian Anda akan menggunakan:
Masalahnya adalah ini hanya berfungsi untuk dua string, Anda harus membungkus tanda kurung tambahan untuk tambahan lainnya:
sumber
sumber
sumber
Saya mencoba kode ini. ini bekerja untuk saya.
sumber
appendString:
jika Anda menggunakanNSMutableString
.Sedang mencoba yang berikut di
lldb
panelkesalahan mana.
alih-alih gunakan alokasi dan
initWithFormat
metode:sumber
Ini untuk logging yang lebih baik, dan logging hanya - berdasarkan metode argumen berganda excellent dicius. Saya mendefinisikan kelas Logger, dan menyebutnya seperti:
Hampir bagus, kecuali harus mengakhiri argumen var dengan "nil" tapi saya kira tidak ada jalan lain dalam Objective-C.
Logger.h
Logger.m
Agar hanya string concat , saya akan mendefinisikan Kategori pada NSString dan menambahkan metode concatenate (+) padanya yang terlihat persis seperti metode log di atas kecuali mengembalikan string. Ada di NSString karena ini adalah metode string, dan ini statis karena Anda ingin membuat string baru dari string 1-N, tidak menyebutnya di salah satu string yang merupakan bagian dari append.
sumber
sumber
Coba stringWithFormat:
sumber
Ketika berhadapan dengan string sering saya merasa lebih mudah untuk membuat file sumber ObjC ++, maka saya dapat menggabungkan string std :: menggunakan metode kedua yang ditunjukkan dalam pertanyaan.
sumber
Metode pilihan saya adalah ini:
Anda dapat mencapainya dengan menambahkan metode bergabung ke NSArray dengan kategori:
@[]
itu definisi singkat untukNSArray
, saya pikir ini adalah metode tercepat untuk menggabungkan string.Jika Anda tidak ingin menggunakan kategori, gunakan langsung
componentsJoinedByString:
metode ini:sumber
Anda dapat menggunakan NSArray sebagai
atau
kamu bisa menggunakan
sumber
Salah satu dari format ini berfungsi di XCode7 ketika saya menguji:
Untuk beberapa alasan, Anda hanya perlu karakter @ operator pada string pertama campuran.
Namun, itu tidak berfungsi dengan penyisipan variabel. Untuk itu, Anda dapat menggunakan solusi yang sangat sederhana ini dengan pengecualian menggunakan makro pada "cat", bukan "dan".
sumber
Untuk semua pecinta Objective C yang membutuhkan ini dalam UI-Test:
sumber
sumber
Mari kita bayangkan bahwa Anda tidak tahu berapa banyak string di sana.
sumber