Xcode : Menghitung elemen dalam array string

Apakah ada cara cepat untuk mendapatkan jumlah string dalam array NSString?

NSString *s[2]={@"1", @"2"}

Saya ingin mengambil panjang 2 dari ini. Saya ada sesuatu seperti (s.size) Saya tahu ada metode -length tetapi itu untuk string bukan array string. Saya baru mengenal Xcode, harap bersikap lembut.


person Vlad Otrocol    schedule 23.02.2012    source sumber


Jawaban (3)


Gunakan NSArray

NSArray *stringArray = [NSArray arrayWithObjects:@"1", @"2", nil];
NSLog(@"count = %d", [stringArray count]);
person beryllium    schedule 23.02.2012
comment
Ya, saya akan menggunakan array yang bisa berubah pada akhirnya. Tapi hanya karena penasaran. Apakah benar-benar tidak ada cara untuk mendapatkan panjang ini? - person Vlad Otrocol; 23.02.2012
comment
Sebenarnya, Anda harus menggunakan [stringArray count] karena ini adalah metode instan dan bukan properti. - person Rengers; 23.02.2012
comment
@Rengers Itu tidak ada bedanya. Properti readonly sama persis dengan metode instan. - person Sulthan; 23.02.2012
comment
@Rengers, count - adalah pengambil. Itu bisa digunakan sebagai properti - person beryllium; 23.02.2012
comment
Saya tahu itu tidak ada bedanya. Hanya saja kebiasaan yang salah memanggil metode menggunakan notasi properti ;). - person Rengers; 23.02.2012
comment
Ya, seorang pengambil dan penyetel. Bagaimanapun, memanggil metode instance seolah-olah itu didefinisikan sebagai properti IMHO masih merupakan praktik yang buruk. - person Rengers; 23.02.2012
comment
@Rengers, notasi titik tidak ada hubungannya dengan properti. Ini adalah cara alternatif untuk memanggil metode. Ya, ini dibuat karena properti tetapi menurut pendapat Anda, menggunakannya untuk metode yang tidak disintesis dari properti bukanlah praktik yang buruk. Dalam kebanyakan kasus, Anda harus mencari header kelas untuk mempelajari bagaimana metode ini dideklarasikan. - person Sulthan; 23.02.2012
comment
Saya tahu itu hanyalah gula sintaksis. Namun bagaimana jika saya membuat metode bernama login yang melakukan banyak hal, berkomunikasi dengan server, dan membalik tampilan setelah selesai. Merupakan praktik buruk untuk memanggilnya menggunakan foo.login? Ini berfungsi kan? IMHO, selama dokumen menyatakannya sebagai metode instan, Anda harus menyebutnya sebagai metode instan. Tapi hei, orang berbeda, gaya berbeda :). - person Rengers; 23.02.2012
comment
Jika saya kira login memiliki tanda tangan -(id)login yang akan sangat aneh untuk metode seperti itu, namanya menunjukkan bahwa itu bukan pengambil dan notasi titik tidak boleh digunakan. Apakah Anda akan menyebutnya dengan notasi titik jika seseorang menambahkan @property (nonatomic, readonly) id login ke kelas? - person Sulthan; 23.02.2012

Ya, ada jalan. Perhatikan bahwa ini hanya berfungsi jika array tidak dibuat secara dinamis menggunakan malloc.


NSString *array[2] = {@"1", @"2"}

//size of the memory needed for the array divided by the size of one element.
NSUInteger numElements = (NSUInteger) (sizeof(array) / sizeof(NSString*));

Jenis array ini khas untuk C, dan karena Obj-C adalah superset C, maka sah untuk menggunakannya. Anda hanya perlu ekstra hati-hati.

person Sulthan    schedule 23.02.2012

Mencoba mencari _countf di objektif-c tetapi tampaknya tidak ada, jadi dengan asumsi operator sizeof dan typeof berfungsi dengan baik dan Anda meneruskan array c yang valid, maka yang berikut ini mungkin berfungsi.

#define _countof( _obj_ ) ( sizeof(_obj_) / (sizeof( typeof( _obj_[0] ))) )

NSString *s[2]={@"1", @"2"} ;
NSInteger iCount = _countof( s ) ;
person redwud    schedule 29.12.2013