Xamarin.iOS 和 Xamarin.Mac 中的 NSString
Xamarin.iOS 和 Xamarin.Mac 的設計會呼叫使用 API 公開原生 .NET 字串類型、 string
、用於 C# 和其他 .NET 程式設計語言的字串操作,以及將字串公開為 API 所公開的數據類型,而不是 NSString
數據類型。
這表示開發人員不一定必須保留要用於在特殊類型中呼叫 Xamarin.iOS 和 Xamarin.Mac API(Unified)的字串,Foundation.NSString
他們可以繼續使用 Mono System.String
的所有作業,而且每當 Xamarin.iOS 或 Xamarin.Mac 中的 API 需要字元串時,我們的 API 系結會負責封送處理資訊。
例如,Objective-C類型 NSString
上的 UILabel
「text」 屬性宣告如下:
@property(nonatomic, copy) NSString *text
這會在 Xamarin.iOS 中公開為:
class UILabel {
public string Text { get; set; }
}
在幕後,這個屬性的實作會將 C# 字串封送處理成 NSString
,並以相同的方式Objective-C呼叫 objc_msgSend
方法。
有幾個第三方 Objective-C API 不會取用 NSString
,而是取用 C 字串串 (“char” )。 在這些情況下,您仍然可以使用 C# 字串數據類型,但您必須使用 [PlainString] 屬性來通知系結產生器,此字串不應該封送處理為 NSString
,而是做為 C 字串。
規則的例外狀況
在 Xamarin.iOS 和 Xamarin.Mac 中,我們已對此規則提出例外狀況。 當我們公開 string
s,以及當我們進行例外和公開 NSString
時,如果 NSString
方法可以執行指標比較,而不是內容比較,就會做出決策。
當 Objective-C API 使用公用 NSString
常數做為代表某些動作的令牌,而不是比較字串的實際內容時,可能會發生這種情況。
在這些情況下, NSString
API 會公開,而且有少數 API 具有此情況。 您也會注意到某些類別中會公開 NSString 屬性。 這些 NSString
屬性會針對通知等項目公開。 這些是屬性通常如下所示:
class Foo {
public NSString FooNotification { get; }
}
通知是當您想要註冊運行時間所廣播的特定事件時,用於 類別的索引鍵 NSNotification
。
機碼看起來通常會像這樣:
class Foo {
public NSString FooBarKey { get; }
}
在 API 中公開 的另一個位置 NSString
是做為 iOS 或 OS X 中特定 API 參數的權杖,以對象 NSDictionary
作為參數。 字典通常包含 NSString
索引鍵。 根據慣例,Xamarin.iOS 會藉由新增 「Key」 名稱來命名這些靜態 NSString
屬性。