Swift: khai báo một từ điển trống


178

Tôi bắt đầu tìm hiểu swiftbằng cách theo dõi iBook- The Swift Programming Languageon Swift do Apple cung cấp. Cuốn sách nói rằng để tạo một từ điển trống, người ta nên sử dụng [:]giống như trong khi khai báo mảng là []:

Tôi đã khai báo một mảng trống như sau:

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

Nhưng khi khai báo từ điển trống, tôi gặp lỗi cú pháp:

let emptyDict = [:]

Làm thế nào để tôi khai báo một từ điển trống?


2
Thật kỳ lạ, tôi không có lỗi khi làm điều này, tôi thậm chí có thể yêu cầu đếm và sân chơi cho tôi 0.
Kaan Dedeoglu

Của tôi không đưa ra bất kỳ lỗi trình biên dịch nào kể cả từ thời gian chạy Tôi có thể nhận được một bản in các hằng số và họ chỉ in nó trong các array :() dictionary :{}câu lệnh in trên bàn điều khiển let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
nsuinteger


Câu trả lời:


310
var emptyDictionary = [String: String]()

­

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

Lưu ý : nếu bạn định thay đổi nội dung của từ điển theo thời gian thì hãy khai báo nó dưới dạng var(biến). Bạn có thể khai báo một từ điển trống là một let(hằng số) nhưng thật vô nghĩa nếu bạn có ý định thay đổi nội dung của nó theo thời gian, vì hằng số không thể thay đổi sau khi nó được khởi tạo.


Câu trả lời cũ :

Tạo một từ điển trống loại <String, String>sẽ như sau:

var emptyDictionary = Dictionary<String, String>()

Cảm ơn bạn, điều này làm việc. Nhưng tại sao tôi không thể khai báo từ điển là hằng số nếu tôi có thể khai báo một mảng là hằng số?
z22

2
Chắc chắn bạn không thể khai báo một từ điển const và làm cho nó trống? NHƯ bạn sẽ không bao giờ có thể thêm giá trị cho nó?
CW0007007

1
Bạn có thể khai báo mảng trống là một hằng số nhưng nó là vô nghĩa. Nếu bạn đọc tài liệu, bạn có thể thấy rằng một mảng luôn được khai báo varnhư tôi đã đề xuất cho bạn: developer.apple.com/l
Library / prelelease / ios / document / Swift / Khăn

1
@ Damir179 dòng đầu tiên là sai. Không có thông tin loại nào ở đó nên bạn phải rõ ràng, nếu không bạn sẽ tạo ra một trường hợp không thể sử dụng được __NSDictionaryI. Hãy thử thêm một yếu tố vào đó emptyDictvà nó sẽ thất bại tại thời gian biên dịch.
Gabriele Petronella

1
var blankDict: NSMutableDixi = [:]
Jio

39

Bạn không thể sử dụng [:]trừ khi có sẵn thông tin loại.

Bạn cần cung cấp nó một cách rõ ràng trong trường hợp này:

var dict = Dictionary<String, String>()

varcó nghĩa là nó có thể thay đổi, vì vậy bạn có thể thêm các mục vào nó. Ngược lại, nếu bạn thực hiện nó letthì bạn không thể sửa đổi thêm ( letcó nghĩa là hằng số).

Bạn có thể sử dụng [:]ký hiệu viết tắt nếu thông tin loại có thể được suy ra, ví dụ

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

// stuff

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

Trong ví dụ cuối, từ điển được biết là có một loại Dictionary<String, String>bởi dòng đầu tiên. Lưu ý rằng bạn không phải xác định rõ ràng, nhưng nó đã được suy luận.


Trong số nhiều tùy chọn có sẵn trong Swift, cú pháp yêu thích của tôi cho một chuỗi chính tả / Chuỗi đơn giản là:var dict: [String: String] = [:]
Dawngerpony

Cảm ơn bạn!. Từ điển <Chuỗi, Chuỗi> () đã khắc phục sự cố của tôi, tôi thực sự đã có một từ điển từ Enum đến MyClass. Bạn có ý nghĩa gì bởi "thông tin loại có sẵn"?
Eduardo Reis

32

Các tài liệu Swift khuyến cáo theo cách sau để khởi tạo một từ điển rỗng:

var emptyDict = [String: String]()

Tôi đã có một chút bối rối khi lần đầu tiên tôi bắt gặp câu hỏi này bởi vì các câu trả lời khác nhau cho thấy các cách khác nhau để khởi tạo một Từ điển trống. Nó chỉ ra rằng thực sự có rất nhiều cách bạn có thể làm điều đó, mặc dù một số cách hơi dư thừa hoặc quá dài cho khả năng của Swift để suy ra loại.

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>()

Sau khi bạn có một Từ điển trống, bạn có thể thêm một cặp khóa-giá trị như thế này:

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

Nếu bạn muốn làm trống từ điển của bạn một lần nữa, bạn có thể làm như sau:

emptyDict = [:]

Các loại vẫn còn <String, String>bởi vì đó là cách nó được khởi tạo.


Nếu bạn muốn khởi tạo một mảng của một từ điển trống, bạn sẽ làm như vậy: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro

19

Sử dụng này sẽ làm việc.

var emptyDict = [String: String]()

Tôi thích cái này Bởi vì chúng ta có thể khai báo một mảng trống bằng cách var emtpyAry = [String](). Có lý.
hbin

16

Bạn chỉ có thể khai báo nó như thế này:

var emptyDict:NSMutableDictionary = [:]

6

Bạn phải cung cấp cho từ điển một loại

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

Nếu trình biên dịch có thể suy ra kiểu, bạn có thể sử dụng cú pháp ngắn hơn

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


4

Tôi cũng đang chơi với cái này Có vẻ lạ khi bạn chỉ có thể khai báo một từ điển trống và sau đó thêm một cặp khóa / giá trị cho nó như vậy:

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

Nhưng bạn có thể tạo một Từ điển chấp nhận các loại giá trị khác nhau bằng cách sử dụng loại "Bất kỳ" như vậy:

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

4

Bạn cần nói rõ ràng loại dữ liệu hoặc loại có thể được suy ra khi bạn khai báo bất cứ điều gì trong Swift.

Swift 3

Mẫu dưới đây khai báo một từ điển với khóa là một Intloại và giá trị là một Stringloại.

Cách 1: Trình khởi tạo

let dic = Dictionary<Int, String>()

Cách 2: Cú pháp tốc ký

let dic = [Int:String]()

Cách 3: Từ điển nghĩa đen

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

4

Swift 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

Nếu bạn muốn tạo một từ điển chung với bất kỳ loại nào

var dictionaryData = [AnyHashable:Any]()

Cảm ơn, cuối cùng vì điều này là cần thiết để thêm một loại từ điển sau này không chỉ là chuỗi
Mitchell Currie

3

Tôi thường sử dụng

var dictionary:[String:String] = [:]
dictionary.removeAll()

3

Khai báo & khởi tạo từ điển trong Swift

Từ điển chuỗi

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

HOẶC LÀ

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

Từ điển của Int

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

HOẶC LÀ

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

Từ điển của AnyObject

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

HOẶC LÀ

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

Từ điển mảng của chuỗi

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

HOẶC LÀ

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

Mảng từ điển của chuỗi

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

HOẶC LÀ

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

0

Bạn có thể khai báo nó là con số không như sau:

var assoc : [String:String]

Sau đó, điều tuyệt vời là bạn đã sắp chữ (chú ý tôi đã sử dụng var và không cho phép, hãy nghĩ về những điều này là có thể thay đổi và không thay đổi). Sau đó, bạn có thể điền nó sau:

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

0

Bạn có thể sử dụng mã sau đây:

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

-1

var dictList = String: Chuỗi cho từ điển trong swift var ArraySectionTitle = String cho mảng trong swift


-2

Nó rất thuận tiện cho việc tìm đường

var dict: Từ điển = [:]


Bạn cũng phải sử dụng các loại khóa và giá trị.
Suragch

-2
var parking = [Dictionary < String, Double >()]

^ điều này thêm một từ điển cho đầu vào [chuỗi: double]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.