Swift:空の辞書を宣言する


178

私はAppleが提供するswiftiBook- The Swift Programming Languageon Swiftをフォローすることから学び始めています。本は空の辞書1を使用する必要があります作成すると言う[:]よう配列を宣言しながら、同じを[]

空の配列を次のように宣言しました:

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

しかし、空の辞書を宣言すると、構文エラーが発生します。

let emptyDict = [:]

空の辞書を宣言するにはどうすればよいですか?


2
、私はこれをやってもエラーがおかしくない、私も数を求めることができると遊び場は私に0を与える
カーン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 2014年

1
空の配列を定数として宣言できますが、無意味です。あなたがドキュメントを読めば、あなたはとして配列が常に宣言されていることを見ることができますvar:私はあなたを示唆したようにdeveloper.apple.com/library/prerelease/ios/documentation/Swift/...
damirstuhec

1
@ Damir179最初の行は明らかに間違っています。そこには型情報がないため、明示的にする必要があり__NSDictionaryIます。そうしないと、の使用できないインスタンスが生成されます。それに要素を追加してみてくださいemptyDict。コンパイル時に失敗します。
ガブリエレペトロネラ2014年

1
var emptyDict:NSMutableDictionary = [:]
Jio

39

[:]タイプ情報がない場合は使用できません。

この場合は、明示的に指定する必要があります。

var dict = Dictionary<String, String>()

var変更可能であることを意味するため、エントリを追加できます。逆に、それをaにすると、letそれをさらに変更することはできません(let定数を意味します)。

[:]たとえば、型情報を推測できる場合は、簡略表記を使用できます。

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

// stuff

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

最後の例では、辞書はDictionary<String, String>最初の行でタイプを持っていることがわかっています。明示的に指定する必要はありませんでしたが、推測されていることに注意してください。


スウィフトで利用可能な多くのオプションのうち、単純な文字列/文字列の辞書のための私のお気に入りの構文は次のとおりです。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>()]
ドン・アレハンドロ

19

これでうまくいきます。

var emptyDict = [String: String]()

私はこれを好む。空の配列をで宣言できるからvar emtpyAry = [String]()です。意味がある。
hbin 2014

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

おかげで、これは後だけではなく、文字列の辞書の種類を追加するために必要とされる最終的にはので
ミッチェルカリー


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.