NSString in Xamarin.iOS e Xamarin.Mac
La progettazione di Xamarin.iOS e Xamarin.Mac richiede l'uso dell'API per esporre il tipo di stringa .NET nativo, string
, per la manipolazione delle stringhe in C# e altri linguaggi di programmazione .NET e per esporre string come tipo di dati esposto dall'API anziché dal NSString
tipo di dati.
Ciò significa che gli sviluppatori non devono mantenere stringhe destinate a essere usate per chiamare l'API Xamarin.iOS & Xamarin.Mac (Unified) in un tipo speciale (Foundation.NSString
), possono continuare a usare Mono per tutte le operazioni e ogni volta che un'API System.String
in Xamarin.iOS o Xamarin.Mac richiede una stringa, l'associazione API gestisce il marshalling delle informazioni.
Ad esempio, la Objective-C proprietà "text" in un UILabel
di tipo NSString
, viene dichiarata come segue:
@property(nonatomic, copy) NSString *text
Questa operazione viene esposta in Xamarin.iOS come segue:
class UILabel {
public string Text { get; set; }
}
Dietro le quinte, l'implementazione di questa proprietà effettua il marshalling della stringa C# in un NSString
oggetto e chiama il objc_msgSend
metodo nello stesso modo che Objective-C lo farebbe.
Esistono alcune API di terze parti Objective-C che non usano un NSString
oggetto , ma usano invece una stringa C (un "char"). In questi casi, è comunque possibile usare il tipo di dati stringa C#, ma è necessario usare l'attributo [PlainString] per informare il generatore di associazioni che questa stringa non deve essere sottoposta a marshalling come stringa NSString
, ma invece come stringa C.
Eccezioni alla regola
In Xamarin.iOS e Xamarin.Mac è stata apportata un'eccezione a questa regola. La decisione tra quando si espone string
e quando si effettua un'eccezione e si espone NSString
s, viene presa se il NSString
metodo potrebbe eseguire un confronto puntatore anziché un confronto di contenuto.
Ciò può verificarsi quando un'API Objective-C usa una costante pubblica NSString
come token che rappresenta un'azione, anziché confrontare il contenuto effettivo della stringa.
In questi casi, NSString
le API vengono esposte e vi è una minoranza di API che lo hanno. Si noterà anche che le proprietà NSString vengono esposte in alcune classi. Tali NSString
proprietà vengono esposte per elementi come le notifiche. Queste sono le proprietà in genere simili alle seguenti:
class Foo {
public NSString FooNotification { get; }
}
Le notifiche sono chiavi usate per la classe quando si vuole eseguire la NSNotification
registrazione per un determinato evento trasmesso dal runtime.
Le chiavi in genere hanno un aspetto simile al seguente:
class Foo {
public NSString FooBarKey { get; }
}
Un'altra posizione in cui NSString
vengono esposti nell'API è come token usati come parametri per determinate API in iOS o OS X che accettano NSDictionary
oggetti come parametri. Il dizionario contiene NSString
in genere chiavi. Xamarin.iOS, per convenzione, assegna un nome alle proprietà statiche NSString
aggiungendo il nome "Key".