Appleが提供するSwiftでiBook -The Swift Programming Language
をフォローすることで、Swift
を学び始めています。この本は、空の辞書を作成するために、配列を[:]
として宣言するときと同じ[]
を使用する必要があると述べています。
次のように空の配列を宣言しました。
let emptyArr = [] // or String[]()
しかし、空の辞書を宣言すると、構文エラーが発生します。
let emptyDict = [:]
空の辞書を宣言するにはどうすればよいですか?
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>()
型情報が利用可能でない限り、[:]
を使用することはできません。
この場合は明示的に提供する必要があります。
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 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 emptyDict = [String: String]()
このように宣言するだけです。
var emptyDict:NSMutableDictionary = [:]
あなたは辞書にタイプを与えなければなりません
// 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
スイフト:
var myDictionary = Dictionary<String, AnyObject>()
スイフト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()
私もこれで遊んでいます。空の辞書を宣言して、それにキーと値のペアを追加することができるのは不思議に思えます。
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"
データ型を明示的に指定する必要があります。そうしないと、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()
var stringDict: [String: String] = [String: String]()
OR
var stringDict: Dictionary<String, String> = Dictionary<String, String>()
var stringDict: [String: Int] = [String: Int]()
OR
var stringDict: Dictionary<String, Int> = Dictionary<String, Int>()
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>>()
任意のタイプの一般的な辞書を作りたい場合
var dictionaryData = [AnyHashable:Any]()
私はいつも使っています
var dictionary:[String:String] = [:]
dictionary.removeAll()
次のようにしてそれをnilとして宣言することができます。
var assoc : [String:String]
それでいいことに、あなたはすでにタイプセットされています(私はvarを使ったのですが、変えられないし不変なものとして考えてみましょう)。その後、後で記入することができます。
assoc = ["key1" : "things", "key2" : "stuff"]
次のコードを使うことができます。
var d1 = Dictionary<Int, Int>()
var d2 = [Int: Int]()
var d3: Dictionary<Int, Int> = [Int : Int]()
var d4: [Int : Int] = [:]