【问题标题】:Swift: declare an empty dictionarySwift:声明一个空字典
【发布时间】:2014-07-24 20:45:12
【问题描述】:

我开始学习swift,通过Apple提供的iBook-The Swift Programming Language on Swift。这本书说创建一个空字典应该使用[:],就像将数组声明为[]

我声明了一个空数组如下:

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

但在声明空字典时,出现语法错误:

let emptyDict = [:]

如何声明一个空字典?

【问题讨论】:

  • 奇怪,我这样做没有错误,我什至可以要求计数,操场给我 0。
  • 我的即使从运行时也没有给出任何编译器错误我可以获得常量的 println 并且他们只是在控制台中打印它array :() dictionary :{}打印语句let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")

标签: ios swift dictionary


【解决方案1】:
var emptyDictionary = [String: String]()

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

注意:如果您打算随着时间的推移更改字典的内容,请将其声明为变量 (var)。您可以将空字典声明为常量 (let),但如果您打算更改它,那将毫无意义,因为常量值在初始化后无法更改。

【讨论】:

  • 谢谢伙计,这行得通。但是如果我可以将数组声明为常量,为什么我不能将字典声明为常量?
  • 您肯定不能声明一个 const 字典并使其为空吗?因为您永远无法为其添加值?
  • 您可以将空数组声明为常量,但这毫无意义。如果您阅读文档,您会看到数组始终声明为 var,正如我建议的那样:developer.apple.com/library/prerelease/ios/documentation/Swift/…
  • @Damir179 第一行完全错误。那里没有类型信息,所以你必须明确,否则你将产生一个不可用的__NSDictionaryI 实例。尝试向 emptyDict 添加一个元素,它会在编译时失败。
  • var emptyDict:NSMutableDictionary = [:]
【解决方案2】:

除非类型信息可用,否则您不能使用[:]

在这种情况下,您需要明确提供:

var dict = Dictionary<String, String>()

var 表示它是可变的,因此您可以向其中添加条目。 相反,如果将其设为let,则无法进一步修改它(let 表示常量)。

例如,如果可以推断类型信息,您可以使用[:] 速记符号

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

// stuff

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

在最后一个示例中,已知字典的第一行类型为Dictionary&lt;String, String&gt;。请注意,您不必明确指定它,但它已被推断出来。

【讨论】:

  • 在 Swift 提供的众多选项中,我最喜欢的简单 String/String dict 语法是:var dict: [String: String] = [:]
  • 谢谢! Dictionary() 解决了我的问题,我实际上有一个从 Enum 到 MyClass 的字典。 “类型信息可用”是什么意思?
【解决方案3】:

Swift documentation 推荐以下方式初始化空字典:

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 = [:]

类型仍然是&lt;String, String&gt;,因为它是这样初始化的。

【讨论】:

  • 如果你想初始化一个空字典的数组,你可以这样做:var emptyDictArray = [[String: String]()]var emptyDictArray = [Dictionary&lt;String, String&gt;()]
【解决方案4】:

使用它会起作用。

var emptyDict = [String: String]()

【讨论】:

  • 我更喜欢这个。因为我们可以通过var emtpyAry = [String]()声明一个空数组。这是有道理的。
【解决方案5】:

你可以像这样简单地声明它:

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
    

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        斯威夫特:

        var myDictionary = Dictionary<String, AnyObject>()
        

        【讨论】:

          【解决方案9】:

          我也在玩这个。您可以只声明一个空字典,然后像这样添加一个键/值对,这似乎很奇怪:

          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"
          

          【讨论】:

            【解决方案10】:

            你需要明确告诉数据类型,或者当你在 Swift 中声明任何东西时可以推断出类型。

            斯威夫特 3

            下面的示例声明了一个字典,其键为Int 类型,值为String 类型。

            方法一:初始化器

            let dic = Dictionary<Int, String>()
            

            方法 2:速记语法

            let dic = [Int:String]()
            

            方法三:字典字面量

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

            【讨论】:

              【解决方案11】:

              如果你想创建任何类型的通用字典

              var dictionaryData = [AnyHashable:Any]()
              

              【讨论】:

              • 谢谢,最后因为这是以后添加字典类型时需要的,而不仅仅是字符串
              【解决方案12】:

              斯威夫特 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()
              

              【讨论】:

                【解决方案13】:

                我经常用

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

                【讨论】:

                  【解决方案14】:

                  要使用[:] aka the empty dictionary literal 创建一个空字典,您实际上需要首先提供上下文,如键和值的类型。使用[:]创建空字典的正确方法是:

                  var dict: [String: Int] = [:]
                  

                  【讨论】:

                    【解决方案15】:

                    您可以使用以下命令将其声明为 nil:

                    var assoc : [String:String]
                    

                    那么好消息是你已经排版了(注意我使用了 var 而不是 let,认为这些是可变的和不可变的)。然后你可以稍后填写:

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

                    【讨论】:

                      【解决方案16】:

                      您可以使用以下代码:

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

                      【讨论】:

                        【解决方案17】:

                        var dictList = String:String 用于 swift 中的字典 var arrSectionTitle = swift 中数组的字符串

                        【讨论】:

                          【解决方案18】:
                          var parking = [Dictionary < String, Double >()]
                          

                          ^ 这会为 [string:double] 输入添加一个字典

                          【讨论】:

                            【解决方案19】:

                            找路非常方便

                            var dict:Dictionary = [:]

                            【讨论】:

                            • 您也必须使用键和值类型。
                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-06-03
                            • 2016-01-26
                            • 2018-03-24
                            • 1970-01-01
                            • 2016-10-16
                            • 2019-08-01
                            相关资源
                            最近更新 更多