NSString в Xamarin.iOS и Xamarin.Mac
Структура Xamarin.iOS и Xamarin.Mac требует использования API для отображения собственного типа строки .NET, string
, для использования строк на C# и других языках программирования .NET, и для отображения строки в качестве типа данных, предоставляемого API, а не типа данныхNSString
.
Это означает, что разработчикам не нужно хранить строки, предназначенные для вызова Xamarin.iOS и API Xamarin.Mac (унифицированный) в специальном типе (Foundation.NSString
), они могут использовать System.String
Mono для всех операций, и каждый раз, когда для API в Xamarin.iOS или Xamarin.Mac требуется строка, поскольку наша привязка API выполняет упаковку информации.
Например, свойство Objective-C "text" в UILabel
типа NSString
объявляется следующим образом:
@property(nonatomic, copy) NSString *text
Оно предоставляется в Xamarin.iOS как:
class UILabel {
public string Text { get; set; }
}
В фоновом режиме реализация этого свойства маршалирует строку C# в NSString
и вызывает метод objc_msgSend
так же, как это делал бы метод Objective-C.
Существует несколько сторонних API Objective-C, которые используют не NSString
, а строку C ("char"). В таких случаях вы по-прежнему сможете использовать строковый тип данных C#, однако также понадобиться атрибут [PlainString], чтобы сообщить генератору привязки, что эта строка должна упаковываться не как NSString
, а как строка C.
Исключения из правил
В Xamarin.iOS и Xamarin.Mac создано исключение из этого правила. Выбор между предоставлением string
и предоставлением NSString
в качестве исключения, нужно делать, если метод NSString
может выполнить сравнение указателей вместо сравнения содержимого.
Это может произойти, когда API Objective-C используют общедоступную константу NSString
в качестве маркера, представляющего некоторое действие, вместо сравнения фактического содержимого строки.
В этих случаях предоставляются NSString
API, но таких API меньшинство. Также обратите внимание, что свойства NSString представлены в некоторых классах. Эти NSString
свойства предоставляются для таких элементов, как уведомления. Эти свойства обычно выглядят следующим образом:
class Foo {
public NSString FooNotification { get; }
}
Уведомления — это ключи, которые используются для класса NSNotification
, если необходимо выполнить регистрацию для конкретного события, транслируемого средой выполнения.
Ключи обычно выглядят примерно так:
class Foo {
public NSString FooBarKey { get; }
}
Другое место, где NSString
представлены в API, — это маркеры, используемые в качестве параметров для некоторых API в iOS или OS X, принимающие объекты NSDictionary
в качестве параметров. Словарь обычно содержит ключи NSString
. Xamarin.iOS, по соглашению, именует статические свойства NSString
, добавляя имя "Ключ".