Swift playground 字典太慢
Swift playground with dictionary too slow
我在 Xcode 7.1 中使用以下代码创建了一个 Swift 游乐场,其评估速度非常慢(通常需要几分钟)。为什么会这样?由于它使 playground 基本上无法使用,我可以做些什么来缩短它的执行时间吗?
let sets = [
"TEMPERATURE":[
(value:37.0, attributes:["A":0.0, "B":0.2]),
(value:37.5, attributes:["A":0.0, "B":1.0]),
(value:38.0, attributes:["A":0.2, "B":0.5]),
(value:38.5, attributes:["A":0.5, "B":0.2]),
(value:39.0, attributes:["A":0.8, "B":0.0]),
(value:39.5, attributes:["A":1.0, "B":0.0]),
(value:40.0, attributes:["A":1.0, "B":0.0]),
],
"VARIATION":[
(value:0.0, attributes:["A":0.0, "B":1.0]),
(value:2.0, attributes:["A":0.2, "B":0.8]),
(value:5.0, attributes:["A":0.5, "B":0.5]),
(value:8.0, attributes:["A":0.8, "B":0.2]),
(value:10.0, attributes:["A":1.0, "B":0.0]),
]
]
尝试在 sets
初始化后附加 "VARIATION"
。如果这仍然很慢,请继续缩小范围以将越来越小的位附加到较大的字典中。我知道这很乏味,但不幸的是,这可能是 Xcode 和大量数据的常见错误。
这里的问题是 Swift 编译器在推断 sets
的类型时非常慢。如果将类型显式化,Swift 编译器将不必花任何时间推导它。试试这个:
let sets: [String:[(value: Double, attributes:[String:Double])]] = [
"TEMPERATURE":[
(value:37.0, attributes:["A":0.0, "B":0.2]),
(value:37.5, attributes:["A":0.0, "B":1.0]),
(value:38.0, attributes:["A":0.2, "B":0.5]),
(value:38.5, attributes:["A":0.5, "B":0.2]),
(value:39.0, attributes:["A":0.8, "B":0.0]),
(value:39.5, attributes:["A":1.0, "B":0.0]),
(value:40.0, attributes:["A":1.0, "B":0.0]),
],
"VARIATION":[
(value:0.0, attributes:["A":0.0, "B":1.0]),
(value:2.0, attributes:["A":0.2, "B":0.8]),
(value:5.0, attributes:["A":0.5, "B":0.5]),
(value:8.0, attributes:["A":0.8, "B":0.2]),
(value:10.0, attributes:["A":1.0, "B":0.0]),
]
]
我在 Xcode 7.1 中使用以下代码创建了一个 Swift 游乐场,其评估速度非常慢(通常需要几分钟)。为什么会这样?由于它使 playground 基本上无法使用,我可以做些什么来缩短它的执行时间吗?
let sets = [
"TEMPERATURE":[
(value:37.0, attributes:["A":0.0, "B":0.2]),
(value:37.5, attributes:["A":0.0, "B":1.0]),
(value:38.0, attributes:["A":0.2, "B":0.5]),
(value:38.5, attributes:["A":0.5, "B":0.2]),
(value:39.0, attributes:["A":0.8, "B":0.0]),
(value:39.5, attributes:["A":1.0, "B":0.0]),
(value:40.0, attributes:["A":1.0, "B":0.0]),
],
"VARIATION":[
(value:0.0, attributes:["A":0.0, "B":1.0]),
(value:2.0, attributes:["A":0.2, "B":0.8]),
(value:5.0, attributes:["A":0.5, "B":0.5]),
(value:8.0, attributes:["A":0.8, "B":0.2]),
(value:10.0, attributes:["A":1.0, "B":0.0]),
]
]
尝试在 sets
初始化后附加 "VARIATION"
。如果这仍然很慢,请继续缩小范围以将越来越小的位附加到较大的字典中。我知道这很乏味,但不幸的是,这可能是 Xcode 和大量数据的常见错误。
这里的问题是 Swift 编译器在推断 sets
的类型时非常慢。如果将类型显式化,Swift 编译器将不必花任何时间推导它。试试这个:
let sets: [String:[(value: Double, attributes:[String:Double])]] = [
"TEMPERATURE":[
(value:37.0, attributes:["A":0.0, "B":0.2]),
(value:37.5, attributes:["A":0.0, "B":1.0]),
(value:38.0, attributes:["A":0.2, "B":0.5]),
(value:38.5, attributes:["A":0.5, "B":0.2]),
(value:39.0, attributes:["A":0.8, "B":0.0]),
(value:39.5, attributes:["A":1.0, "B":0.0]),
(value:40.0, attributes:["A":1.0, "B":0.0]),
],
"VARIATION":[
(value:0.0, attributes:["A":0.0, "B":1.0]),
(value:2.0, attributes:["A":0.2, "B":0.8]),
(value:5.0, attributes:["A":0.5, "B":0.5]),
(value:8.0, attributes:["A":0.8, "B":0.2]),
(value:10.0, attributes:["A":1.0, "B":0.0]),
]
]