Bagikan melalui


NSString di Xamarin.iOS dan Xamarin.Mac

Desain panggilan Xamarin.iOS dan Xamarin.Mac untuk MENGGUNAKAN API untuk mengekspos jenis string .NET asli, string, untuk manipulasi string dalam C# dan bahasa pemrograman .NET lainnya, dan untuk mengekspos string sebagai jenis data yang diekspos oleh API alih-alih NSString jenis data.

Ini berarti bahwa pengembang tidak harus menyimpan string yang dimaksudkan untuk digunakan untuk memanggil Xamarin.iOS & Xamarin.Mac API (Terpadu) dalam jenis khusus (Foundation.NSString), mereka dapat terus menggunakan Mono System.String untuk semua operasi, dan setiap kali API di Xamarin.iOS atau Xamarin.Mac memerlukan string, pengikatan API kami mengurus marshaling informasi.

Misalnya, Objective-C properti "teks" pada UILabel jenis NSString, dinyatakan seperti ini:

@property(nonatomic, copy) NSString *text

Ini diekspos dalam Xamarin.iOS sebagai:

class UILabel {
    public string Text { get; set; }
}

Di balik layar, implementasi properti ini membuat string C# menjadi NSString dan memanggil metode dengan objc_msgSend cara yang sama seperti itu Objective-C .

Ada beberapa API pihak Objective-C ketiga yang tidak menggunakan NSString, tetapi sebaliknya menggunakan string C ("char"). Dalam kasus tersebut , Anda masih dapat menggunakan jenis data string C#, tetapi Anda harus menggunakan atribut [PlainString] untuk menginformasikan generator pengikatan bahwa string ini tidak boleh dirusak sebagai NSString, tetapi sebagai string C.

Pengecualian untuk Aturan

Di Xamarin.iOS dan Xamarin.Mac, kami telah membuat pengecualian untuk aturan ini. Keputusan antara ketika kita mengekspos string, dan ketika kita membuat pengecualian dan mengekspos NSString, dibuat jika NSString metode dapat melakukan perbandingan pointer alih-alih perbandingan konten.

Ini bisa terjadi ketika Objective-C API menggunakan konstanta publik NSString sebagai token yang mewakili beberapa tindakan, alih-alih membandingkan konten string yang sebenarnya.

Dalam kasus tersebut, NSString API diekspos, dan ada minoritas API yang memiliki ini. Anda juga akan melihat bahwa properti NSString diekspos di beberapa kelas. Properti tersebut NSString diekspos untuk item seperti pemberitahuan. Itu adalah properti biasanya terlihat seperti ini:

class Foo {
     public NSString FooNotification { get; }
}

Pemberitahuan adalah kunci yang digunakan untuk NSNotification kelas saat Anda ingin mendaftar untuk acara tertentu yang disiarkan oleh runtime.

Kunci biasanya terlihat seperti ini:

class Foo {
     public NSString FooBarKey { get; }
}

Tempat lain di mana NSStrings diekspos dalam API adalah sebagai token yang digunakan sebagai parameter untuk API tertentu di iOS atau OS X yang mengambil NSDictionary objek sebagai parameter. Kamus biasanya berisi NSString kunci. Xamarin.iOS, menurut konvensi, memberi nama properti statis NSString tersebut dengan menambahkan nama "Kunci".