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 NSString
s 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".