繁体   English   中英

Swift 中的 [[String:String]]: 和 [[String:String]]() 有什么区别

[英]What is the difference between [[String:String]]! and [[String:String]]() in Swift

我正在做一个项目,在那里我找到了一个数组变量

var items: [[String: String]]!

我在谷歌搜索如何定义一个空数组,我得到的结果是

var itemsNew: [[String: String]]()

在附加数据时使用项目数组时出错

 self.appDelegate.items.append([Name: "sdsd",
                                 rate: "0.2",
                                 Quantity:"3",
                                 Taxable:"true",
                                  Category: "",
                                 inven: "true",
                                  amount : "0.23",
                                 mod: "",
                                 darray: "",
                                 list: "",
                                 famount: "0.0"])

给出错误“致命错误:在隐式展开可选值时意外发现 nil:文件”。 我给出了核心价值,但它仍然在崩溃。 不知道为什么会崩溃。 有人可以帮助我吗?

因为

var items: [[String: String]]! not allocating memory or giving back, the reference to item where developer can append the items. 

所以var itemsNew: [[String: String]]()正在工作,因为它正在创建 memory ,您可以在其中 append 项目。

第一个 object items被声明为隐式展开的可选项。 如果您将其items没有? 可选地展开,你是说你肯定知道items中有一个值,如果它没有我希望应用程序崩溃的值,我敢肯定它不是nil

在第二种情况下,您正在创建一个non-optional空字典itemsNew数组,它不能为nil ,但在声明时为空。 总之,您可以将可选声明替换为空声明,它们仍然会在这些属性中存储相同的类型。

var items = [[String: String]]()
var itemsNew = [[String: String]]()

[[String: String]]()[[String: String]]类型数组的 object 。

其中[[String: String]]! 是一个[[String: String]]类型的数组类型,在执行时不能为 nil,因为它是一个隐式展开的可选项。

您收到Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file ,因为items从未初始化。 但是您正在尝试将项目添加到实际上是 null 值的items中。 您可以通过使用以下代码替换items声明来解决此错误。

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

而且 itemsNew 的声明也是错误的。 您可以如下声明它。

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

或者

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM