NSString v Xamarin.iOS a Xamarin.Mac
Návrh Xamarin.iOS i Xamarin.Mac volá rozhraní API pro použití k zveřejnění nativního typu řetězce .NET, string
pro manipulaci s řetězci v jazyce C# a dalších programovacích jazycích .NET a k zveřejnění řetězce jako datového typu vystaveného rozhraním API místo datového NSString
typu.
To znamená, že vývojáři by neměli uchovávat řetězce, které mají být použity pro volání do rozhraní Xamarin.iOS a Xamarin.Mac API (Unified) ve speciálním typu (Foundation.NSString
), mohou dál používat Mono System.String
pro všechny operace a kdykoli rozhraní API v Xamarin.iOS nebo Xamarin.Mac vyžaduje řetězec, naše vazba rozhraní API se postará o zařazování informací.
Například Objective-C vlastnost "text" u UILabel
typu NSString
je deklarována takto:
@property(nonatomic, copy) NSString *text
Toto je vystaveno v Xamarin.iOS jako:
class UILabel {
public string Text { get; set; }
}
Implementace této vlastnosti zařadí řetězec jazyka C# na NSString
pozadí a volá objc_msgSend
metodu stejným způsobem, jako Objective-C by to bylo.
Existuje několik rozhraní API třetích stran Objective-C , která nepoužívají NSString
řetězec jazyka C , ale využívají řetězec jazyka C ("char"). V těchto případech můžete stále použít datový typ řetězce jazyka C#, ale musíte použít atribut [PlainString] k informování generátoru vazeb, že tento řetězec by neměl být zařazován jako NSString
řetězec , ale místo toho jako řetězec jazyka C.
Výjimky pravidla
V Xamarin.iOS i Xamarin.Mac jsme provedli výjimku tohoto pravidla. Rozhodnutí mezi tím, kdy zveřejníme string
, a když provedeme výjimku a zveřejníme NSString
, se provede, pokud NSString
by metoda mohla místo porovnání obsahu provádět porovnání ukazatelů.
K tomu může dojít, když Objective-C rozhraní API jako token používá veřejnou NSString
konstantu, která představuje nějakou akci, místo porovnání skutečného obsahu řetězce.
V takových případech NSString
jsou rozhraní API vystavená a existuje menšina rozhraní API, která tato rozhraní mají. Všimněte si také, že vlastnosti NSString jsou zpřístupněny v některých třídách. Tyto NSString
vlastnosti jsou zpřístupněny pro položky, jako jsou oznámení. Tyto vlastnosti obvykle vypadají takto:
class Foo {
public NSString FooNotification { get; }
}
Oznámení jsou klíče, které se používají pro NSNotification
třídu, když chcete zaregistrovat konkrétní událost, která je vysílána modulem runtime.
Klíče obvykle vypadají přibližně takto:
class Foo {
public NSString FooBarKey { get; }
}
Dalším místem, kde NSString
jsou vystaveny v rozhraní API, jsou tokeny, které se používají jako parametry pro určitá rozhraní API v iOSu nebo OS X, které přebírají NSDictionary
objekty jako parametry. Slovník obvykle obsahuje NSString
klíče. Xamarin.iOS podle konvence tyto statické NSString
vlastnosti pojmenuje přidáním názvu "Klíč".