私はSwiftを学習しています。その中にDictionary
が表示されます。
しかし、SwiftでNSDictionary
を使用している例はたくさんあります。
これら2つの違いは何ですか?
Swiftでインデックスのある配列をPHPの配列のように使用したい。
どちらを使用するのが良いですか?
辞書はネイティブSwift構造体です。NSDictionaryはCocoaクラスです。ドキュメントは非常に明確かつ完全に説明されているため、相互に(通常の制限内で)ブリッジされています。
これは、ArrayおよびNSArrayとまったく同じです。
実際には、Swiftの強力な型の概念に関して、大きな違いは
NSDictionary
は通常、タイプが指定されていませんDictionary
には特定のタイプがあるはずです。したがって、ネイティブDictionary
が推奨されます。
これが契約です
すべての意図と目的のために、それらは同じものです。 Foundation
をインポートする限り、コンパイラはそれらを同じものとして認識します。
特定の違いについては、 したがってApple doc が役立ちます。
概観
NSObject
は、ほとんどのObjective-Cクラス階層のルートクラスです。 NSObject
を通じて、オブジェクトはランタイムシステムへの基本的なインターフェイスとObjective-Cオブジェクトとして動作する機能を継承します。
つまり、NSObjects
は古い(Objective C)時代の古代の遺物であるということです。
何が良いかについては、それはあなた次第です。 Swiftオブジェクトは、コードを最新の状態に保つためだけにnsの対応物よりも優れていますが、nsを必要とするNSURLCONNECTION
のようなコードを使用している場合は、nsオブジェクトを使用する必要があるかもしれませんオブジェクト。
お役に立てれば。
この例を考えてみましょう
let dataArray = NSMutableArray()
let d0 = ["code":"AA","name":"American Airlines"]
let d1 = ["code":"BA","name":"British Airlines"]
let d2 = ["code":"DA","name":"Delta Airlines"]
dataArray.addObject(d0)
dataArray.addObject(d1)
dataArray.addObject(d2)
後で...
let d0 = dataArray.objectAtIndex(0) as! [String:String]
let lbl = UILabel()
lbl.text = d0["code"] // no xcode warnings
SwiftでのNSDictionaryの使用
let d0 = dataArray.objectAtIndex(0) as! NSDictionary
次に、辞書の値を強制的に整形する必要があります。
lbl1.text = d0["name"] as! String
経験から-json応答を処理するとき-緩やかに型付けされているためNSDictionaryを使用しましたが、それが正確に何を含んでいるかを保証することはできません-それだけが有効なjsonです。ネイティブSwiftこのユースケースを処理するためのツールのライブラリが増えています。ここをご覧になることをお勧めします https://github.com/search?q=json+NSDictionary+Swift&type=Code&utf8 =%E2%9C%9
この場合、「if let」ダンスでデータをハッキングする必要があります。
if let results = json["result"] as? NSDictionary
最後に、NSMutableDictionaryは、NSDictionaryでキーと値のペアを変更できないため、Dictionaryと同等です。
例えば。
results["code"] = 100 // <-- BOOM
回避策-
let mResults = NSMutableDictionary(dictionary:results)
mResults["code"] = NSNumber(100) // <-- OK
明確化を要求するもの-NSMutableDictionaries内にのみNSObjects(NSNumbers/NSArrays/NSCount/NSSet)を固定できます。 Swift辞書はこれを回避します。