我在构建时表现非常糟糕(索引需要5到7分钟),因为我在代码中添加了以下行。
var valuesToPassToDetailViewController = [[String:[String: Any]]]()
var dict = [String:[String: Any]]()
dict = [title as! String:["title":title as! String, "valueD":postValue["value"] ?? "", "valueD":postValue["value"] ?? "","valueD":postValue["value"] ?? "","valueD": postValue["value"] ?? "","valueD": postValue["value"] ?? "","valueD":postValue["value"] ?? "","valueD":postValue["value"] ?? "" ,"valueD": postValue["value"] ?? "", "valueD": postValue["value"] ?? ""]]
self.valuesToPassToDetailViewController.append(dict)
请注意,valueD是Key的替代品,Key当然具有不同的键值,并且替换值与上面的值相同。
请帮我解决这个问题。谢谢你的每一个回应。
答案 0 :(得分:1)
(除了是一个糟糕的代码实践)你编写一个代码,Swift编译器将处理严重,因为文字嵌套很多。 (也发生在其他代码中。) 更简单的解决方案:
正如您重复使用相同的值:
let nonNullValue = postValue["value"] ?? ""
dict = [title as! String : ["title":title,
"valueD": nonNullValue,
"valueD": nonNullValue,
"valueD": nonNullValue,
"valueD": nonNullValue,
"valueD": nonNullValue,
"valueD": nonNullValue,
"valueD": nonNullValue ,
"valueD": nonNullValue,
"valueD": nonNullValue]]
将完成这项工作。
如果我被允许,可以使用一些编码说明:
使用var来表示重复值,这样做不仅可以使编译器满意,而且通常也更快(特别是如果你使用abcd()会产生一个调用/返回..)
不要在控件之间传递通用结构,在读/下载时,创建你的类/结构并传递它们。
最好动态添加到dict,如果你必须从磁盘/网络中读取数据,这将很容易。
希望这可以提供帮助。
另一个建议:
以这种方式传递给typealias:
typealias Dict = [[String:[String:Any]]]
所以你可以写:
var valuesToPassToDetailViewController2 = Dict()
反测试:
var valuesToPassToDetailViewController = [[String:[String: Any]]]()
var valuesToPassToDetailViewController2 = Dict()
valuesToPassToDetailViewController2 = valuesToPassToDetailViewController