如何转换此语句以获得更好的性能

时间:2017-08-15 08:42:20

标签: arrays swift swift3

我在构建时表现非常糟糕(索引需要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当然具有不同的键值,并且替换值与上面的值相同。

请帮我解决这个问题。谢谢你的每一个回应。

1 个答案:

答案 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