Swift: ประกาศพจนานุกรมที่ว่างเปล่า


178

ฉันเริ่มเรียนรู้swiftโดยติดตาม iBook- The Swift Programming Languageon Swift ที่ Apple จัดหาให้ หนังสือเล่มนี้บอกว่าจะสร้างพจนานุกรมว่างเปล่าหนึ่งอันควรใช้[:]เหมือนกันในขณะที่ประกาศอาร์เรย์[]ดังนี้

ฉันประกาศอาร์เรย์ที่ว่างเปล่าดังนี้

let emptyArr = [] // or String[]()

แต่เมื่อประกาศพจนานุกรมเปล่าฉันได้รับข้อผิดพลาดทางไวยากรณ์:

let emptyDict = [:]

ฉันจะประกาศพจนานุกรมว่างเปล่าได้อย่างไร


2
แปลกฉันไม่มีข้อผิดพลาดในการทำเช่นนี้ฉันยังสามารถขอนับและสนามเด็กเล่นให้ฉัน 0
Kaan Dedeoglu

เหมืองไม่ให้รวบรวมข้อผิดพลาดใด ๆ แม้กระทั่งจากรันไทม์ฉันจะได้รับ println ของค่าคงที่และพวกเขาเพียงแค่พิมพ์นี้ในคอนโซล array :() dictionary :{}งบพิมพ์ let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
nsuinteger


คำตอบ:


310
var emptyDictionary = [String: String]()

­

var populatedDictionary = ["key1": "value1", "key2": "value2"]

หมายเหตุ : หากคุณกำลังจะเปลี่ยนเนื้อหาของพจนานุกรมเมื่อเวลาผ่านไปให้ประกาศว่าเป็นvar(ตัวแปร) คุณสามารถประกาศพจนานุกรมว่างเปล่าเป็นlet(คงที่) แต่ไม่มีประโยชน์หากคุณต้องการเปลี่ยนแปลงเนื้อหาตลอดเวลาเนื่องจากไม่สามารถเปลี่ยนแปลงค่าคงที่หลังจากเริ่มต้นได้แล้ว


คำตอบเก่า :

การสร้างพจนานุกรมประเภทที่ว่างเปล่า<String, String>จะมีลักษณะดังนี้:

var emptyDictionary = Dictionary<String, String>()

ขอบคุณเพื่อนงานนี้ แต่ทำไมฉันไม่สามารถประกาศพจนานุกรมเป็นค่าคงที่ถ้าฉันสามารถประกาศอาร์เรย์เป็นค่าคงที่ได้?
z22

2
แน่นอนคุณไม่สามารถประกาศพจนานุกรม const และทำให้ว่างเปล่าได้ ตามที่คุณจะไม่สามารถเพิ่มค่าได้หรือไม่
CW0007007

1
คุณสามารถประกาศอาร์เรย์ที่ว่างเปล่าเป็นค่าคงที่ แต่มันไม่มีจุดหมาย หากคุณอ่านเอกสารคุณจะเห็นว่ามีการประกาศอาร์เรย์เสมอตามvarที่ฉันแนะนำให้คุณ: developer.apple.com/library/prerelease/ios/documentation/Swift/…
damirstuhec

1
@ Damir179 บรรทัดแรกผิดปกติ __NSDictionaryIไม่มีข้อมูลประเภทที่นั่นเพื่อให้คุณจะต้องมีความชัดเจนมิฉะนั้นคุณจะผลิตเช่นใช้ไม่ได้ของ ลองเพิ่มองค์ประกอบเข้ากับสิ่งนั้นemptyDictและมันจะล้มเหลวในเวลารวบรวม
Gabriele Petronella

1
var emptyDict: NSMutableDictionary = [:]
Jio

39

คุณไม่สามารถใช้งานได้[:]หากไม่มีข้อมูลประเภท

คุณต้องระบุอย่างชัดเจนในกรณีนี้:

var dict = Dictionary<String, String>()

varหมายความว่ามันไม่แน่นอนดังนั้นคุณสามารถเพิ่มรายการได้ ในทางกลับกันถ้าคุณทำให้เป็นletคุณจะไม่สามารถแก้ไขได้อีก ( letหมายถึงค่าคงที่)

คุณสามารถใช้รูปแบบการ[:]จดชวเลขถ้าข้อมูลประเภทสามารถอนุมานได้เช่น

var dict = ["key": "value"]

// stuff

dict = [:] // ok, I'm done with it

ในตัวอย่างสุดท้ายพจนานุกรมเป็นที่รู้จักกันว่ามีประเภทDictionary<String, String>ตามบรรทัดแรก โปรดทราบว่าคุณไม่จำเป็นต้องระบุอย่างชัดเจน แต่มันถูกอนุมาน


จากตัวเลือกมากมายที่มีใน Swift ไวยากรณ์โปรดของฉันสำหรับ dict String / String อย่างง่ายคือ:var dict: [String: String] = [:]
Dawngerpony

ขอบคุณ!. พจนานุกรม <String, String> () แก้ไขปัญหาของฉันฉันมีพจนานุกรมจาก Enum เป็น MyClass คุณหมายถึงอะไรโดย "ข้อมูลประเภทที่มีอยู่"?
Eduardo Reis

32

เอกสารสวิฟท์แนะนำวิธีการต่อไปในการเริ่มต้นพจนานุกรมว่าง:

var emptyDict = [String: String]()

ฉันสับสนเล็กน้อยเมื่อฉันเจอคำถามนี้เป็นครั้งแรกเพราะคำตอบที่ต่างกันแสดงวิธีที่แตกต่างในการเริ่มต้นพจนานุกรมว่างเปล่า ปรากฎว่าจริงๆแล้วมีหลายวิธีที่คุณสามารถทำได้แม้ว่าบางอย่างจะซ้ำซ้อนหรือ verbose น้อยมากเนื่องจากความสามารถของ Swift ในการอนุมานประเภท

var emptyDict = [String: String]()
var emptyDict = Dictionary<String, String>()
var emptyDict: [String: String] = [:]
var emptyDict: [String: String] = [String: String]()
var emptyDict: [String: String] = Dictionary<String, String>()
var emptyDict: Dictionary = [String: String]()
var emptyDict: Dictionary = Dictionary<String, String>()
var emptyDict: Dictionary<String, String> = [:]
var emptyDict: Dictionary<String, String> = [String: String]()
var emptyDict: Dictionary<String, String> = Dictionary<String, String>()

หลังจากคุณมีพจนานุกรมว่างเปล่าคุณสามารถเพิ่มคู่คีย์ - ค่าแบบนี้:

emptyDict["some key"] = "some value"

หากคุณต้องการล้างพจนานุกรมของคุณอีกครั้งคุณสามารถทำสิ่งต่อไปนี้:

emptyDict = [:]

ประเภทยังคงเป็น<String, String>เพราะนั่นคือวิธีการเริ่มต้น


หากคุณต้องการเริ่มต้นอาเรย์ของพจนานุกรมว่างคุณควรทำเช่นนี้: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro

19

ใช้สิ่งนี้จะได้ผล

var emptyDict = [String: String]()

ฉันชอบอันนี้ var emtpyAry = [String]()เพราะเราสามารถประกาศอาร์เรย์ที่ว่างเปล่าโดย นั่นทำให้รู้สึก
hbin


6

คุณต้องให้พจนานุกรมเป็นประเภท

// empty dict with Ints as keys and Strings as values
var namesOfIntegers = Dictionary<Int, String>()

หากคอมไพเลอร์สามารถอนุมานประเภทคุณสามารถใช้ไวยากรณ์ที่สั้นลง

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type Int, String


4

ฉันกำลังเล่นกับเรื่องนี้เช่นกัน ดูเหมือนว่าแปลกที่คุณสามารถประกาศพจนานุกรมว่างเปล่าแล้วเพิ่มคู่คีย์ / ค่าลงในรายการดังนี้:

var emptyDictionary = Dictionary<String, Float>()
var flexDictionary = [:]
emptyDictionary["brian"] = 4.5
flexDictionary["key"] = "value" // ERROR : cannot assign to the result of this expression

แต่คุณสามารถสร้างพจนานุกรมที่ยอมรับประเภทค่าที่แตกต่างกันโดยใช้ประเภท "ใด ๆ " ดังนี้:

var emptyDictionary = Dictionary<String, Any>()
emptyDictionary["brian"] = 4.5
emptyDictionary["mike"] = "hello"

4

คุณต้องบอกประเภทข้อมูลอย่างชัดเจนหรือสามารถอนุมานประเภทเมื่อคุณประกาศอะไรใน Swift

สวิฟท์ 3

ตัวอย่างด้านล่างประกาศพจนานุกรมที่มีคีย์เป็นIntประเภทและค่าเป็นStringประเภท

วิธีที่ 1: เครื่องมือเริ่มต้น

let dic = Dictionary<Int, String>()

วิธีที่ 2: ชวเลขไวยากรณ์

let dic = [Int:String]()

วิธีที่ 3: ตัวอักษรพจนานุกรม

var dic = [1: "Sample"]
// dic has NOT to be a constant
dic.removeAll()

4

สวิฟต์ 4

let dicc = NSDictionary()

//MARK: - This is empty dictionary
let dic = ["":""]

//MARK:- This is variable dic means if you want to put variable 
let dic2 = ["":"", "":"", "":""]

//MARK:- Variable example
let dic3 = ["name":"Shakeel Ahmed", "imageurl":"https://abc?abc.abc/etc", "address":"Rawalpindi Pakistan"]

//MARK: - This is 2nd Variable Example dictionary
let dic4 = ["name": variablename, "city": variablecity, "zip": variablezip]

//MARK:- Dictionary String with Any Object
var dic5a = [String: String]()
//MARK:- Put values in dic
var dic5a = ["key1": "value", "key2":"value2", "key3":"value3"]

var dic5b = [String:AnyObject]()
dic5b = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

or
//MARK:- Dictionary String with Any Object
let dic5 = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

//MARK:- More Easy Way
let dic6a = NSDictionary()
let dic6b = NSMutalbeDictionary()

3

หากคุณต้องการสร้างพจนานุกรมทั่วไปด้วยประเภทใดก็ได้

var dictionaryData = [AnyHashable:Any]()

ขอบคุณในที่สุดเพราะมันเป็นสิ่งจำเป็นในการเพิ่มประเภทพจนานุกรมในภายหลังไม่เพียง แต่สตริง
Mitchell Currie


3

การประกาศและการเริ่มต้นพจนานุกรมใน Swift

พจนานุกรมสตริง

var stringDict: [String: String] = [String: String]()

หรือ

var stringDict: Dictionary<String, String> = Dictionary<String, String>()

พจนานุกรมของ Int

var stringDict: [String: Int] = [String: Int]()

หรือ

var stringDict: Dictionary<String, Int> = Dictionary<String, Int>()

พจนานุกรม AnyObject

var stringDict: [String: AnyObject] = [String: AnyObject]()

หรือ

var stringDict: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()

พจนานุกรมอาเรย์ของสตริง

var stringDict: [String: [String]] = [String: [String]]()

หรือ

var stringDict: Dictionary<String, Array<String>> = Dictionary<String, Array<String>>()

Array of Dictionaries of String

var stringDict: [[String: String]] = [[String: String]]()

หรือ

var stringDict: Array<Dictionary<String, String>> = Array<Dictionary<String, String>>()

0

คุณสามารถประกาศว่าเป็นศูนย์ด้วยต่อไปนี้:

var assoc : [String:String]

สิ่งที่ดีคือคุณได้เรียงแล้ว (สังเกตว่าฉันใช้ var และไม่ปล่อยให้คิดว่าสิ่งเหล่านี้ไม่แน่นอนและไม่เปลี่ยนรูป) จากนั้นคุณสามารถเติมได้ในภายหลัง:

assoc = ["key1" : "things", "key2" : "stuff"]

0

คุณสามารถใช้รหัสต่อไปนี้:

var d1 = Dictionary<Int, Int>()
var d2 = [Int: Int]()
var d3: Dictionary<Int, Int> = [Int : Int]()
var d4: [Int : Int] = [:]

-1

var dictList = String: สตริงสำหรับพจนานุกรมใน swift var arrSectionTitle = สตริงสำหรับอาร์เรย์ใน swift


-2

มันมีประโยชน์มากสำหรับการค้นหาเส้นทางของคุณ

var dict: Dictionary = [:]


คุณต้องใช้ประเภทของคีย์และค่าด้วย
Suragch

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.