共用方式為


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 中,我們已對此規則提出例外狀況。 當我們公開 strings,以及當我們進行例外和公開 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 屬性。