스위프트 : 빈 사전 선언


178

Apple에서 제공 swift하는 iBook- The Swift Programming Languageon Swift 를 따라 배우기 시작했습니다 . 이 책은 다음 [:]과 같이 배열을 선언하는 동안 빈 사전을 만들어야한다고 말합니다 [].

다음과 같이 빈 배열을 선언했습니다.

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 사전을 선언하고 그것을 비울 수 없었습니까? AS에 값을 추가 할 수 없습니까?
CW0007007

1
빈 배열을 상수로 선언 할 수 있지만 의미가 없습니다. 당신이 문서를 읽는다면, 당신은 같은 배열은 항상 선언 된 것을 볼 수 있습니다 var내가 당신을 제안 : developer.apple.com/library/prerelease/ios/documentation/Swift/...
damirstuhec

1
@ Damir179 첫 줄은 잘못되었습니다. 거기에 타입 정보가 없으므로 명시 적으로 표현해야합니다. 그렇지 않으면 사용할 수없는 인스턴스를 생성합니다 __NSDictionaryI. emptyDict그것에 요소를 추가하면 컴파일 타임에 실패합니다.
Gabriele Petronella 2016 년

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에서 사용할 수있는 많은 옵션 중에서 간단한 문자열 / 문자열 사전에 가장 좋아하는 구문은 다음과 같습니다.var dict: [String: String] = [:]
Dawngerpony

감사합니다!. Dictionary <String, String> () 문제를 해결했습니다. 실제로 Enum에서 MyClass 로의 사전이있었습니다. "유형 정보를 사용할 수 있습니다"는 무슨 뜻입니까?
Eduardo Reis

32

스위프트 문서는 빈 사전을 초기화하기 위해 다음과 같은 방법을 권장합니다 :

var emptyDict = [String: String]()

다른 답변이 빈 사전을 초기화하는 다른 방법을 보여주기 때문에이 질문에 처음 왔을 때 약간 혼란 스러웠습니다. 실제로 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

16

다음과 같이 간단히 선언 할 수 있습니다.

var emptyDict:NSMutableDictionary = [:]

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

그러나 다음과 같이 "Any"유형을 사용하여 다른 값 유형을 허용하는 사전을 작성할 수 있습니다.

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

문자열의 사전 배열

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

또는

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

0

다음을 사용하여 nil로 선언 할 수 있습니다.

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 parking = [Dictionary < String, Double >()]

^ 이것은 [string : double] 입력에 대한 사전을 추가합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.