4

NSKeyedArchiver.archivedDataWithRootObject(obj)オブジェクトを に変換するために使用しますNSData。このarchivedDataWithRootObject(obj)メソッドでは、そのパラメータがNSObjectに準拠するである必要がありますNSCoding

Swift StringArray、および をアーカイブしてみDictionaryましたが、うまくいきました。なので適合だと思いStringます。NSObjectNSCoding

また、プレイグラウンドでこのコードをチェックして、次のことを確認しStringましたNSObject

var str = "Hello, playground"
let isObject = (str is NSObject) // isObject is true

しかし、String(Cmd + クリックで) の定義に移動すると、それStringstruct. Stringであることを示すコードが見つかりませんNSObject

public struct String {
    /// An empty `String`.
    public init()
}

では、なぜ定義で、それがStringであることを示すコードが見つからないのでしょうか? そして、なぜ構造体を にできるのでしょうか?StringNSObjectNSObject

4

1 に答える 1

4

StringArrayDictionaryはすべて、Objective-C の対応するもの ( NSStringNSArrayおよびNSDictionary) にブリッジされており、そのようにシームレスに動作できます。

文字列自体は継承せずNSObject、実際には構造体ですが、どちらからブリッジされNSStringますか。Stringコードで(Swift) を使用すると、 のNSStringように動作し、提供したコードからの出力が得られます。

于 2016-07-12T03:43:32.137 に答える