NSString dans Xamarin.iOS et Xamarin.Mac
La conception des appels Xamarin.iOS et Xamarin.Mac pour l’API d’utilisation pour exposer le type de chaîne .NET natif, pour string
la manipulation de chaînes dans C# et d’autres langages de programmation .NET, et pour exposer la chaîne comme type de données exposé par l’API au lieu du type de données.NSString
Cela signifie que les développeurs ne doivent pas avoir à conserver les chaînes destinées à être utilisées pour appeler dans l’API Xamarin.iOS &Xamarin.Mac (unifiée) dans un type spécial (Foundation.NSString
), elles peuvent continuer à utiliser Mono System.String
pour toutes les opérations, et chaque fois qu’une API dans Xamarin.iOS ou Xamarin.Mac nécessite une chaîne, notre liaison d’API s’occupe du marshaling des informations.
Par exemple, la Objective-C propriété « text » sur un UILabel
type NSString
est déclarée comme suit :
@property(nonatomic, copy) NSString *text
Ceci est exposé dans Xamarin.iOS comme suit :
class UILabel {
public string Text { get; set; }
}
En arrière-plan, l’implémentation de cette propriété marshale la chaîne C# en une NSString
et appelle la objc_msgSend
méthode de la même façon que cela Objective-C .
Il existe une poignée d’API tierces Objective-C qui ne consomment pas un NSString
, mais consomment plutôt une chaîne C (un « char »). Dans ce cas, vous pouvez toujours utiliser le type de données de chaîne C#, mais vous devez utiliser l’attribut [PlainString] pour informer le générateur de liaison que cette chaîne ne doit pas être marshalée en tant que NSString
chaîne , mais plutôt en tant que chaîne C.
Exceptions à la règle
Dans Xamarin.iOS et Xamarin.Mac, nous avons fait une exception à cette règle. La décision entre le moment où nous exposons string
et quand nous faisons une exception et NSString
les s, est prise si la NSString
méthode peut effectuer une comparaison de pointeurs au lieu d’une comparaison de contenu.
Cela peut se produire lorsqu’une Objective-C API utilise une constante publique NSString
en tant que jeton qui représente une action, au lieu de comparer le contenu réel de la chaîne.
Dans ces cas, NSString
les API sont exposées et il existe une minorité d’API qui en ont. Vous remarquerez également que les propriétés NSString sont exposées dans certaines classes. Ces NSString
propriétés sont exposées pour les éléments tels que les notifications. Ces propriétés ressemblent généralement à ceci :
class Foo {
public NSString FooNotification { get; }
}
Les notifications sont des clés utilisées pour la NSNotification
classe lorsque vous souhaitez vous inscrire à un événement particulier en cours de diffusion par le runtime.
Les clés ressemblent généralement à ceci :
class Foo {
public NSString FooBarKey { get; }
}
Un autre endroit où NSString
s’exposent dans l’API est en tant que jetons utilisés comme paramètres pour certaines API dans iOS ou OS X qui prennent NSDictionary
des objets en tant que paramètres. Le dictionnaire contient généralement des NSString
clés. Xamarin.iOS, par convention, nomme ces propriétés statiques NSString
en ajoutant le nom « Key ».