NSString w środowiskach Xamarin.iOS i Xamarin.Mac
Projekt zarówno platform Xamarin.iOS, jak i Xamarin.Mac wywołuje interfejs API do uwidocznienia natywnego typu ciągu .NET, string
w celu manipulowania ciągami w języku C# i innych językach programowania platformy .NET oraz uwidacznia ciąg jako typ danych uwidoczniony przez interfejs API zamiast NSString
typu danych.
Oznacza to, że deweloperzy nie powinni przechowywać ciągów, które mają być używane do wywoływania interfejsu API Xamarin.iOS i Xamarin.Mac (Unified) w specjalnym typie (Foundation.NSString
), mogą nadal używać interfejsów Mono System.String
dla wszystkich operacji, a za każdym razem, gdy interfejs API na platformie Xamarin.iOS lub Xamarin.Mac wymaga ciągu, nasze powiązanie interfejsu API zajmuje się kierowaniem informacji.
Na przykład Objective-C właściwość "text" typu UILabel
NSString
jest zadeklarowana następująco:
@property(nonatomic, copy) NSString *text
Jest to widoczne w środowisku Xamarin.iOS jako:
class UILabel {
public string Text { get; set; }
}
W tle implementacja tej właściwości marshaluje ciąg języka C# do elementu NSString
i wywołuje objc_msgSend
metodę w taki sam sposób, jak Objective-C w ten sam sposób.
Istnieje kilka interfejsów API innych firmObjective-C, które nie korzystają z NSString
elementu , ale zamiast tego używają ciągu języka C (znak). W takich przypadkach nadal można użyć typu danych ciągu języka C#, ale należy użyć atrybutu [PlainString] w celu poinformowania generatora powiązań, że ten ciąg nie powinien być marshaled jako NSString
, ale zamiast tego jako ciąg języka C.
Wyjątki od reguły
W obu środowiskach Xamarin.iOS i Xamarin.Mac wprowadziliśmy wyjątek od tej reguły. Decyzja między tym, kiedy ujawniamy string
s, a kiedy dokonujemy wyjątku i uwidaczniamy NSString
, jest podjęta, jeśli NSString
metoda może wykonywać porównanie wskaźników zamiast porównania zawartości.
Może się tak zdarzyć, gdy Objective-C interfejsy API używają stałej publicznej NSString
jako tokenu reprezentującego jakąś akcję, zamiast porównywać rzeczywistą zawartość ciągu.
W takich przypadkach NSString
interfejsy API są uwidocznione i istnieje mniejszość interfejsów API, które to mają. Zauważysz również, że właściwości NSString są widoczne w niektórych klasach. Te NSString
właściwości są widoczne dla elementów, takich jak powiadomienia. Są to właściwości, które zwykle wyglądają następująco:
class Foo {
public NSString FooNotification { get; }
}
Powiadomienia są kluczami używanymi dla NSNotification
klasy, gdy chcesz zarejestrować określone zdarzenie emitowane przez środowisko uruchomieniowe.
Klucze zwykle wyglądają mniej więcej tak:
class Foo {
public NSString FooBarKey { get; }
}
Innym miejscem, w którym NSString
obiekty są uwidocznione w interfejsie API, jest tokeny, które są używane jako parametry dla niektórych interfejsów API w systemie iOS lub OS X, które przyjmują NSDictionary
obiekty jako parametry. Słownik zazwyczaj zawiera NSString
klucze. Xamarin.iOS zgodnie z konwencją nazywa te właściwości statyczne NSString
, dodając nazwę "Klucz".