我真的对我们在swift中创建字典的方式感到困惑.那么请你告诉我它们之间有什么不同
var myDic3 = [String : AnyObject]()
Run Code Online (Sandbox Code Playgroud)
和
var myDic2 = Dictionary <Int,AnyObject>()
Run Code Online (Sandbox Code Playgroud)
和
var myDic4 = [ : ]
Run Code Online (Sandbox Code Playgroud)
当我声明像myDic4时,我无法为它添加键和值:
myDic4["001"] = "ABC"
Run Code Online (Sandbox Code Playgroud)
并且错误是" 无法分配给此表达式的结果 "
您可以通过4种不同的方式在Swift中声明和初始化一个空字典:
String
Any
var myDic1 = [String : Any]()
var myDic2 = Dictionary<String, Any>()
这些都会给你相同的结果,这是一个字典,其中var myDic3: [String : Any] = [:]
s为键,var myDic4: Dictionary<String, Any> = [:]
s为值.
String
只是简写Any
.他们的意思是一样的.
在上面的情况1和2中,变量的类型由Swift根据分配给它们的值推断.在上面的情况3和4中,类型被明确地分配给变量,然后用空字典初始化它们[String : Any]
.
当您创建这样的字典时:
var myDic5 = [:]
Run Code Online (Sandbox Code Playgroud)
Swift没有什么可继续的,它推断你的字典是类型的Dictionary<String, Any>
.问题是它[:]
是一个不可变类型(你不能改变它).可变等价物是一个[:]
,所以这将工作:
var myDic6: NSMutableDictionary = [:]
Run Code Online (Sandbox Code Playgroud)
但您应该更喜欢使用上面的案例1或3,因为NSDictionary
它不是Swift类型,而是来自Foundation框架.事实上,你甚至可以做的唯一原因NSDictionary
是因为你已经导入了Foundation框架(与NSMutableDictionary
,NSMutableDictionary
或var myDic = [:]
).如果不导入Foundation,则会出现语法错误.
归档时间: |
|
查看次数: |
4503 次 |
最近记录: |