Sdílet prostřednictvím


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, stringpro 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 NSStringje 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 NSStringjsou 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íč".