Swift字典類
在Foundation框架中提供一種字典集合,它是由“鍵-值”對構成的集合。鍵集合不能重複,值集合沒有特殊要求。鍵和值集合中的元素可以是任何對象,但是不能是nil。Foundation框架字典類也分為NSDictionary不可變字典和NSMutableDictionary可變字典。一、NSDictionary類
NSDictionary有很多方法和屬性,下麵總結其常用的方法和屬性。
initWithDictionary: 構造器,通過Swift的Dictionary創建NSDictionary對象。
initWithObjects:forKeys: 構造器,通過鍵集合和值集合創建NSDictionary對象。count 字典集合的長度。
objectForKey: 通過鍵獲得值對象。
allKeys: 返回所有鍵集合。
下麵看NSDictionary數組的示例代碼:
import Foundation let keyString : NSString = "one two three four five" ① var keys : NSArray = keyString.componentsSeparatedByString(" ") ② let valuestring : NSString = "alpha bravo charlie delta echo" ③ var values : NSArray = valuestring.componentsSeparatedByString(" ") ④ vardict : NSDictionary = NSDictionary(objects: keys, forKeys:values) ⑤ NSLog("%@", dict.description) ⑥ varvalue:NSString = dict.objectForKey("three") as NSString ⑦ NSLog("three = %@", value) varkys = dict.allKeys ⑧ for item : AnyObject in kys { ⑨ var key = item as NSString NSLog("%@ - %@", key, dict.objectForKey(key) as NSString) }
上述代碼第①行和第③行代碼是NSString字符串,字符串由單詞和空格組成。第②行和第④行代碼使用空格分割字符串,返回類型是NSArray數組。
第⑤行代碼實例化NSDictionary對象,objects參數是值數組values,forKeys參數是。第⑥行代碼description屬性是獲得字典的內容。第⑦行代碼是通過objectForKey方法讀取鍵對應的值,並且轉換為NSString類型。
第⑧行代碼dict.allKeys是獲得所有的鍵集合kys,第⑨行代碼是遍曆鍵集合kys。
輸出結果如下:
2014-07-06 20:19:07.274 PlaygroundStub_OSX[4110:303] { five = echo; four = delta; one = alpha; three = charlie; two = bravo; } 2014-07-06 20:19:07.281 PlaygroundStub_OSX[4110:303] three = charlie 2014-07-06 20:19:07.296 PlaygroundStub_OSX[4110:303] one - alpha 2014-07-06 20:19:07.300 PlaygroundStub_OSX[4110:303] five - echo 2014-07-06 20:19:07.305 PlaygroundStub_OSX[4110:303] three - charlie 2014-07-06 20:19:07.308 PlaygroundStub_OSX[4110:303] two - bravo 2014-07-06 20:19:07.313 PlaygroundStub_OSX[4110:303] four - delta
二、NSMutableDictionary類
NSMutableDictionary是NSDictionary的子類,它有很多方法和屬性,下麵總結其常用的方法和屬性。
-setObject:forKey: 通過鍵和值。
-removeObjectForKey: 按照鍵移除值。
下麵看NSDictionary數組的示例代碼:
import Foundation var mutable : NSMutableDictionary = NSMutableDictionary() ① // add objects mutable.setObject("Tom", forKey: "tom@jones.com") ② mutable.setObject("Bob", forKey: "bob@dole.com") NSLog("%@", mutable.description) var keys = mutable.allKeys for item : AnyObject in keys { var key = item as NSString NSLog("%@ - %@", key, mutable.objectForKey(key) as NSString) }
上述代碼第①行是實例化NSMutableDictionary,第②行代碼是通過setObject方法添加鍵和值。
輸出結果如下:
2014-07-06 20:42:11.596 PlaygroundStub_OSX[4332:303] { "bob@dole.com" = Bob; "tom@jones.com" = Tom; } 2014-07-06 20:42:11.605 PlaygroundStub_OSX[4332:303] bob@dole.com - Bob 2014-07-06 20:42:11.608 PlaygroundStub_OSX[4332:303] tom@jones.com – Tom
三、NSDictionary與Dictionary之間的關係
NSDictionary與Dictionary之間的關係如同NSArray與Array之間的關係,Swift在底層能夠將它們自動地橋接起來,一個NSDictionary對象橋接之後的結果是[NSObject : AnyObject]字典(值為NSObject 類型,鍵為AnyObject 類型的Dictionary字典)。
下麵我們看一個使用Dictionary和NSDictionary的示例:
import Foundation ① let keyString : NSString = "one two three four five" let keys : NSArray = keyString.componentsSeparatedByString(" ") let valueString : NSString = "alpha bravo charlie delta echo" let values : NSArray = valueString.componentsSeparatedByString(" ") let foundationDict : NSDictionary = NSDictionary(objects:values, forKeys:keys) ② let swiftDict : Dictionary = foundationDict ③ println(swiftDict.description) let value: AnyObject? = swiftDict["three"] ④ println("three = \(value)") for (key, value) in swiftDict { ⑤ println ("\(key) - \(value)") }
代碼第①行是引入Foundation。第②行代碼聲明並初始化NSDictionary字典,第③行代碼是將NSDictionary字典賦值給Dictionary字典,這個過程也發生了類型轉換,不僅是NSDictionary到Dictionary的轉換,而且它們的內部元素也發生了轉換。
第④行代碼是從Dictionary字典取three鍵對應的值,它的類型是可選的AnyObject類型,這是因為有可能取不到這個值。第⑤行代碼是遍曆Dictionary字典鍵和值集合。
更多內容請關注國內第一本Swift圖書《Swift開發指南》
本書交流討論網站:https://www.51work6.com/swift.php
歡迎加入Swift技術討論群:362298485
歡迎關注智捷iOS課堂微信公共平台

最後更新:2017-04-03 05:40:17
上一篇:
android 中ids.xml資源的使用
下一篇:
[Java]如何提高Web服務端並發效率的異步編程技術?
Spring三種bean裝配方案
Login控件:用戶登錄失敗的消息提示
數字貨幣是貨幣?資產?還是別的?場外交易係統開發
無需寫try/catch,也能正常處理異常
《vSphere性能設計:性能密集場景下CPU、內存、存儲及網絡的最佳設計實踐》一3.1.1 在投入生產之前測試變化
[LeetCode]92.Reverse Linked List II
java實現斷點續傳的原理
PostgreSQL Oracle兼容性 - 計算字符長度與字節長度(char(?) 與varchar(?)空格如何計算長度)
Oracle 查詢表中各列名稱、表中列數
Ticket Lock的Relaxed Atomics優化