Class

NSDictionary

An object representing a static collection of key-value pairs, for use instead of a Dictionary constant in cases that require reference semantics. キー値ペアからなる静的なコレクションを表しているオブジェクト、参照意味論を必要とする場合にDictionary定数の代わりに使うため。

Declaration 宣言

class NSDictionary : NSObject

Overview 概要

The NSDictionary class declares the programmatic interface to objects that manage immutable associations of keys and values. For example, an interactive form could be represented as a dictionary, with the field names as keys, corresponding to user-entered values. NSDictionaryクラスは、不変のキーと値関係を管理するオブジェクトに対するプログラムインターフェイスを宣言します。例えば、ある相互作用形式は、フィールド名をキーとして持ち、ユーザ入力の値に対応している、ある辞書として表されることができます。

Use this class or its subclass NSMutableDictionary when you need a convenient and efficient way to retrieve data associated with an arbitrary key. NSDictionary creates static dictionaries, and NSMutableDictionary creates dynamic dictionaries. (For convenience, the term dictionary refers to any instance of one of these classes without specifying its exact class membership.) このクラスまたはそれのサブクラスNSMutableDictionaryを、あなたが随意のキーと結び付けられたデータを回収する便利で効率の良いやり方を必要とする時に使ってください。NSDictionaryは静的な辞書を作成します、そしてNSMutableDictionaryは動的な辞書を作成します。(便宜上、この用語、辞書は、これらのクラスの内の1つのどんなインスタンスにでも、それの正確なクラス帰属を明記しないで言及します。

A key-value pair within a dictionary is called an entry. Each entry consists of one object that represents the key and a second object that is that key’s value. Within a dictionary, the keys are unique. That is, no two keys in a single dictionary are equal (as determined by isEqual(_:)). In general, a key can be any object (provided that it conforms to the NSCopying protocol—see below), but note that when using key-value coding the key must be a string (see Accessing Object Properties). Neither a key nor a value can be nil; if you need to represent a null value in a dictionary, you should use NSNull. 辞書の内部のあるキー値ペアは、登録項目(エントリ)と呼ばれます。各登録項目は、キーを表す一方のオブジェクトとそのキーの持つ値である2番目のオブジェクトからなります。ある辞書内では、それらキーは特有です。すなわち、ある単一の辞書の中の2つのキーが等しい(isEqual(_:)によって決定されるように)ことはありません。一般に、キーはどんなオブジェクトであることもできます(それがNSCopyingプロトコルに準拠するという条件で — 下で見てください)、しかしキー値コーディングを使う場合そのキーは文字列でなければならないことに注意してください(Accessing Object Propertiesを見てください)。キーも値もnilであることはできません;あなたがヌル値を辞書の中で表す必要があるならば、あなたはNSNullを使うべきです。

NSDictionary is “toll-free bridged” with its Core Foundation counterpart, CFDictionary. See Toll-Free Bridging for more information on toll-free bridging. NSDictionaryは、それのCore Foundation相当物、CFDictionaryと「トールフリーブリッジ」されます。トールフリーブリッジに関する更なる情報としてトールフリーブリッジを見てください。

Creating NSDictionary Objects Using Dictionary Literals NSDictionaryオブジェクトを辞書リテラルを使って作成する

In addition to the provided initializers, such as init(objects:forKeys:), you can create an NSDictionary object using a dictionary literal. 提供されたイニシャライザ、例えばinit(objects:forKeys:)などに加えて、あなたはNSDictionaryオブジェクトを辞書リテラルを使って作成できます。


let dictionary: NSDictionary = [
    "anObject" : someObject,
    "helloString" : "Hello, World!",
    "magicNumber" : 42,
    "aValue" : someValue
]

In Objective-C, the compiler generates code that makes an underlying call to the init(objects:forKeys:count:) method. Objective-Cでは、コンパイラがinit(objects:forKeys:count:)メソッドへの隠れた呼び出しをするコードを生成します。


id objects[] = { someObject, @"Hello, World!", @42, someValue };
id keys[] = { @"anObject", @"helloString", @"magicNumber", @"aValue" };
NSUInteger count = sizeof(objects) / sizeof(id);
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects
                                                       forKeys:keys
                                                         count:count];

Unlike dictionaryWithObjectsAndKeys: and other initializers, dictionary literals specify entries in key-value order. You should not terminate the list of objects with nil when using this literal syntax, and in fact nil is an invalid value. For more information about object literals in Objective-C, see Working with Objects in Programming with Objective-C. dictionaryWithObjectsAndKeys:および他のイニシャライザと違い、辞書リテラルはキー値順で登録項目を指定します。あなたは、このリテラル構文を使う時にオブジェクトのリストをnilで終端すべきではありません、そして実際nilは無効な値です。Objective-Cにおけるオブジェクトリテラルについてのさらなる情報として、Working with ObjectsProgramming with Objective-Cで見てください。

In Swift, the NSDictionary class conforms to the DictionaryLiteralConvertible protocol, which allows it to be initialized with dictionary literals. For more information about object literals in Swift, see Literal Expression in The Swift Programming Language (Swift 4.1). Swiftでは、NSDictionaryクラスはDictionaryLiteralConvertibleプロトコルに準拠します、そのことはそれが辞書リテラルで初期化されることを可能にします。Swiftにおけるオブジェクトリテラルについての更なる情報としてリテラル式Swiftプログラミング言語(Swift 4.1)で見てください。

Accessing Values Using Subscripting 添え字を使って値にアクセスする

In addition to the provided instance methods, such as object(forKey:), you can access NSDictionary values by their keys using subscripting. 提供されたインスタンスメソッド、例えばobject(forKey:)などに加えて、あなたはNSDictionary値にアクセスすることがそれらのキーによる添え字を使うことで可能です。


let value = dictionary["helloString"]

Enumerating Entries Using for-in Loops for-inループを使って登録項目を列挙する

In addition to the provided instance methods, such as enumerateKeysAndObjects(_:), you can enumerate NSDictionary entries using for-in loops. 提供されたインスタンスメソッド、例えばenumerateKeysAndObjects(_:)などに加えて、あなたはNSDictionary登録項目を列挙することがfor-in loopsを使って可能です。


for (key, value) in dictionary {
    print("Value: \(value) for key: \(key)")
}

In Objective-C, NSDictionary conforms to the NSFastEnumeration protocol. Objective-Cでは、NSDictionaryNSFastEnumerationプロトコルに準拠します。

In Swift, NSDictionary conforms to the SequenceType protocol. Swiftでは、NSDictionarySequenceTypeプロトコルに準拠します。

Subclassing Notes サブクラス作成の注意

You generally shouldn’t need to subclass NSDictionary. Custom behavior can usually be achieved through composition rather than subclassing. あなたは、一般的にNSDictionaryのサブクラス作成を必要としないでしょう。あつらえの挙動は、普通はサプクラスを作成するよりコンポジションを通して達成されます。

Methods to Override メソッドのオーバーライド

If you do need to subclass NSDictionary, take into account that it is a Class cluster. Any subclass must override the following primitive methods: あなたがNSDictionaryのサブクラスを作成する必要があるならば、それがClass clusterである可能性を考慮に入れてください。何らかのサブクラスは、以下の根本的メソッドをオーバーライドする必要があります:

The other methods of NSDictionary operate by invoking one or more of these primitives. The non-primitive methods provide convenient ways of accessing multiple entries at once. NSDictionaryの他のメソッドは、1つ以上のこれら根本的なものを発動することによって作動します。根本的でないメソッドは、一度に複数の登録項目にアクセスする便利な方法を提供します。

Alternatives to Subclassing サブクラス作成の代わりとなるもの

Before making a custom class of NSDictionary, investigate NSMapTable and the corresponding Core Foundation type, CFDictionary. Because NSDictionary and CFDictionary are “toll-free bridged,” you can substitute a CFDictionary object for a NSDictionary object in your code (with appropriate casting). Although they are corresponding types, CFDictionary and NSDictionary do not have identical interfaces or implementations, and you can sometimes do things with CFDictionary that you cannot easily do with NSDictionary. NSDictionaryのあつらえのクラスを作る前に、NSMapTableと対応するCore Foundation型、CFDictionaryを研究してください。NSDictionaryCFDictionaryは、「toll-freeブリッジ」されるので、あなたは、あなたのコードにおいて(適切なキャストを行うことで)CFDictionaryオブジェクトをNSDictionaryオブジェクトの代わりにすることができます。とは言えそれらが対応している型であっても、CFDictionaryNSDictionaryは全く同一のインターフェイスや実装を持ちません、そしてあなたは時々CFDictionaryを使って、あなたがNSDictionaryでは簡単にはできないような事を行えます。

If the behavior you want to add supplements that of the existing class, you could write a category on NSDictionary. Keep in mind, however, that this category will be in effect for all instances of NSDictionary that you use, and this might have unintended consequences. Alternatively, you could use composition to achieve the desired behavior. あなたが追加したい挙動が既存のクラスのそれを補足するならば、あなたはNSDictionary上でカテゴリを書くことができます。しかしながら、このカテゴリはあなたが使うNSDictionaryインスタンス全てに対して発効になるのを心してください、そしてこれは意図しない成り行きをもたらすかもしれません。あるいは、あなたは望む挙動を達成するためにコンポジション(合成)を使うことができます。

Topics 話題

Creating an Empty Dictionary 空の辞書を作成する

Creating a Dictionary from Objects and Keys 辞書をオブジェクトとキーから作成する

Creating a Dictionary from Another Dictionary 辞書を別の辞書から作成する

Creating a Dictionary from an External Source 辞書を外部ソースから作成する

Creating a Dictionary from an NSCoder 辞書をNSCoderから作成する

Creating Key Sets for Shared-Key Optimized Dictionaries 共有キー最適化辞書のためのキー集合を作成する

Counting Entries 登録項目を数える

Comparing Dictionaries 辞書の比較

Accessing Keys and Values キーと値にアクセスする

Enumerating Dictionaries 辞書を列挙する

Sorting Dictionaries 辞書をソートする

Filtering Dictionaries 辞書をフィルタする

Storing Dictionaries 辞書をソートする

Accessing File Attributes ファイル属性にアクセスする

These convenience methods are for use with dictionaries returned by the FileManager method attributesOfItem(atPath:), and allow you to access POSIX and HFS attributes for files and directories. これら便宜メソッドは、FileManagerのメソッドattributesOfItem(atPath:)によって返される辞書で使うためのものです、そしてあなたにファイルおよびディレクトリに対するPOSIXおよびHFS属性にアクセスさせます。

Describing a Dictionary 辞書を記述する

Supporting Types 支援を行う型

Initializers イニシャライザ

Instance Properties インスタンスプロパティ

See Also 参照

Dictionaries さまざまな辞書