NSString em Xamarin.iOS e Xamarin.Mac
O design do Xamarin.iOS e do Xamarin.Mac exige que a API use para expor o tipo de cadeia de caracteres .NET nativo, , string
para manipulação de cadeia de caracteres em C# e outras linguagens de programação .NET e para expor a cadeia de caracteres como o tipo de dados exposto pela API em vez do tipo de NSString
dados.
Isso significa que os desenvolvedores não devem ter que manter cadeias de caracteres que se destinam a ser usadas para chamar Xamarin.iOS & Xamarin.Mac API (Unified) em um tipo especial (Foundation.NSString
), eles podem continuar usando System.String
Mono para todas as operações, e sempre que uma API no Xamarin.iOS ou Xamarin.Mac requer uma cadeia de caracteres, nossa associação de API se encarrega de empacotar as informações.
Por exemplo, a Objective-C propriedade "text" em um UILabel
do tipo NSString
, é declarada assim:
@property(nonatomic, copy) NSString *text
Isso é exposto no Xamarin.iOS como:
class UILabel {
public string Text { get; set; }
}
Nos bastidores, a implementação dessa propriedade marshals a cadeia de caracteres C# em um NSString
e chama o objc_msgSend
método da mesma maneira que Objective-C faria.
Há um punhado de APIs de terceiros Objective-C que não consomem um , mas consomem uma cadeia de caracteres C (um NSString
"char"). Nesses casos, você ainda pode usar o tipo de dados de cadeia de caracteres C#, mas deve usar o atributo [PlainString] para informar ao gerador de vinculação que essa cadeia de caracteres não deve ser empacotada como um NSString
, mas sim como uma cadeia de caracteres C.
Exceções à regra
Tanto no Xamarin.iOS quanto no Xamarin.Mac, abrimos uma exceção a essa regra. A decisão entre quando expomos s e quando fazemos uma exceção e expomos string
NSString
s é tomada se o NSString
método puder estar fazendo uma comparação de ponteiro em vez de uma comparação de conteúdo.
Isso pode acontecer quando uma API usa uma Objective-C constante pública NSString
como um token que representa alguma ação, em vez de comparar o conteúdo real da cadeia de caracteres.
Nesses casos, as APIs são expostas, NSString
e há uma minoria de APIs que têm isso. Você também notará que as propriedades NSString são expostas em algumas classes. Essas NSString
propriedades são expostas para itens como notificações. Essas são propriedades que geralmente se parecem com isto:
class Foo {
public NSString FooNotification { get; }
}
As notificações são chaves usadas para a NSNotification
classe quando você deseja se registrar para um evento específico que está sendo transmitido pelo tempo de execução.
As teclas geralmente se parecem com isto:
class Foo {
public NSString FooBarKey { get; }
}
Outro lugar onde NSString
s são expostos na API é como tokens que são usados como parâmetros para determinadas APIs no iOS ou OS X que tomam NSDictionary
objetos como parâmetros. O dicionário normalmente contém NSString
chaves. O Xamarin.iOS, por convenção, nomeia essas propriedades estáticas NSString
adicionando o nome "Key".