Swift 字典与lt;字符串,有吗?>;和[字符串:有吗?]

Swift 字典与lt;字符串,有吗?>;和[字符串:有吗?],swift,dictionary,Swift,Dictionary,我想在Swift函数中传递一个可选的dictionary参数,我尝试将函数声明为 func myFunction(_ type:Int, params:Dictionary<String,Any?>?) 当我试图传递字典时,第一个声明得到警告“表达式被隐式强制从Any?到Any”,而第二个声明则没有。我需要知道两者之间有什么区别,为什么会发出警告。仅供参考,以下是我在这两种情况下传递词典的方式: myFunc(1, params:["key1": value1, "key2":

我想在Swift函数中传递一个可选的dictionary参数,我尝试将函数声明为

 func myFunction(_ type:Int, params:Dictionary<String,Any?>?)
当我试图传递字典时,第一个声明得到警告“表达式被隐式强制从Any?到Any”,而第二个声明则没有。我需要知道两者之间有什么区别,为什么会发出警告。仅供参考,以下是我在这两种情况下传递词典的方式:

myFunc(1, params:["key1": value1, "key2": value2])

根据Swift文件,它们是相同的:

Swift字典的类型完整地写为dictionary,其中Key是可以用作 dictionary键,Value是字典所使用的值的类型 存储这些密钥

您还可以将字典的类型以速记形式写成[Key: 价值]。虽然这两种形式在功能上是相同的,但是 首选速记形式,并在以下情况下在本指南中使用: 指字典的类型


我使用的是Xcode 8.0版,无法重新生成您的问题。

它们只是字典声明的不同语法糖,一种类型在所有情况下都不起作用,这是一种bug

比如说,

  var msSet = [Vertex<Int> : Double]() 
var msSet=[Vertex:Double]()
我问了一个与此相关的问题


[“key1”,value1,“key2”,value2]
是数组而不是字典。您应该避免使用带有可选值的字典类型,因为
字典
API使用
nil
表示给定值缺少键。因此,使用可选的
类型将为您提供双重包装的可选项,这可能会导致各种混淆。但在任何情况下,请向我们提供一份。您向我们展示的代码既不完整(什么是
value1
value2
?),也有不正确的地方–您试图将数组文本传递到字典参数,在函数调用中缺少结尾
,这两个函数的名称不同(
myFunc
vs.
myFunction
)@NiravD很抱歉,我做了更正,现在它是正确的!
  var msSet = [Vertex<Int> : Double]()