web-dev-qa-db-ja.com

Swift:空の辞書を宣言します

Appleが提供するSwiftでiBook -The Swift Programming Languageをフォローすることで、Swiftを学び始めています。この本は、空の辞書を作成するために、配列を[:]として宣言するときと同じ[]を使用する必要があると述べています。

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

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

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

let emptyDict = [:]

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

160
z22
var emptyDictionary = [String: String]()

</s></s></s></s></s></s></s></s>

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

:辞書の内容を時間の経過とともに変更しようとしているのなら、それをvar(変数)として宣言してください。canは空の辞書をlet(定数)として宣言できますが、その内容を時間の経過とともに変更するつもりがあるのであれば意味がありません。初期化されています。


古い答え

<String, String>型の空の辞書を作成すると、以下のようになります。

var emptyDictionary = Dictionary<String, String>()
278
damirstuhec

型情報が利用可能でない限り、[:]を使用することはできません。

この場合は明示的に提供する必要があります。

var dict = Dictionary<String, String>()

varは変更可能であることを意味するので、それにエントリを追加することができます。逆に、それをletにすると、それ以上修正することはできません(letは定数を意味します)。

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

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

// stuff

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

最後の例では、辞書の最初の行にDictionary<String, String>という型があります。明示的に指定する必要はありませんが、推測されています。

38

Swiftのドキュメント では、空の辞書を初期化するために次の方法を推奨しています。

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>です。

27
Suragch

これを使うとうまくいきます。

var emptyDict = [String: String]()
19
Lim Thye Chean

このように宣言するだけです。

var emptyDict:NSMutableDictionary = [:]
15
Jio

あなたは辞書にタイプを与えなければなりません

// 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
6
nevan king

スイフト:

var myDictionary = Dictionary<String, AnyObject>()
5
Juan Boero

スイフト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()
4
Shakeel Ahmed

私もこれで遊んでいます。空の辞書を宣言して、それにキーと値のペアを追加することができるのは不思議に思えます。

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

しかし、次のように "Any"型を使用することで、さまざまな値型を受け入れるDictionaryを作成できます。

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

データ型を明示的に指定する必要があります。そうしないと、Swiftで何かを宣言するときに型が推測されます。

Swift 3

以下のサンプルでは、​​keyを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()
3
Xinyang Li

Swiftでの宣言と宣言

文字列の辞書

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

OR

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

Intの辞書

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

OR

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

AnyObjectの辞書

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

OR

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

文字列の配列の辞書

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

OR

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

文字列の辞書の配列

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

OR

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

任意のタイプの一般的な辞書を作りたい場合

var dictionaryData = [AnyHashable:Any]()
2
reetu

私はいつも使っています

var dictionary:[String:String] = [:]
dictionary.removeAll()
1
Lind el Loren

次のようにしてそれをnilとして宣言することができます。

var assoc : [String:String]

それでいいことに、あなたはすでにタイプセットされています(私はvarを使ったのですが、変えられないし不変なものとして考えてみましょう)。その後、後で記入することができます。

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

次のコードを使うことができます。

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