数组太长,使用swift 3而且太复杂而无法解决

时间:2016-10-27 14:20:54

标签: arrays swift

我的代码在使用Swift 2.2时运行良好,但在转换为Swift 3后,我有一个41个值的数组(并非所有显示在那里)输入就像变量被编译器拒绝了。我收到一条错误消息,告诉我“表达式太复杂,无法在合理的时间内解决,请考虑将表达式分解为不同的子表达式”。

let staticPos = [CGPoint(x:523,y:409),CGPoint(x:723,y:407),CGPoint(x:922,y:401),
CGPoint(x:1122,y:409),CGPoint(x:1335,y:401),CGPoint(x:1542,y:409),
CGPoint(x:523,y:496),CGPoint(x:726,y:504),CGPoint(x:922,y:489),
CGPoint(x:1132,y:497),CGPoint(x:1355,y:489),CGPoint(x:1552,y:505),
CGPoint(x:514,y:587),CGPoint(x:705,y:595),CGPoint(x:910,y:587),
CGPoint(x:1122,y:595),CGPoint(x:1345,y:587),CGPoint(x:1551,y:603), CGPoint(x:524,y:698),
CGPoint(x:724,y:689),CGPoint(x:922,y:690),
CGPoint(x:1122,y:706),CGPoint(x:1345,y:690),CGPoint(x:1551,y:706)]

如何在数组中输入所有这些值,以便编译器接受它们?

谢谢,

2 个答案:

答案 0 :(得分:6)

另一种解决方案是创建一个元组数组,然后将它们映射到[CGPoint]。使用闭包进行初始化可确保代码只运行一次。

let staticPos : [CGPoint] = {
  let positions = [(523,409),(723,407),(922,401),(1122,409),(1335,401),(1542,409),(523,496),
                   (726,504),(922,489),(1132,497),(1355,489),(1552,505),(514,587),(705,595),
                   (910,587),(1122,595),(1345,587),(1551,603),(524,698),(724,689),(922,690),
                   (1122,706),(1345,690),(1551,706)]
  return positions.map{ CGPoint(x:$0.0, y:$0.1) }

}()

答案 1 :(得分:4)

在Xcode 8.0和Xcode 8.1 GM种子中测试,编译:

let staticPos: [CGPoint] = [CGPoint(x:523,y:409),CGPoint(x:723,y:407),CGPoint(x:922,y:401),
                 CGPoint(x:1122,y:409),CGPoint(x:1335,y:401),CGPoint(x:1542,y:409),
                 CGPoint(x:523,y:496),CGPoint(x:726,y:504),CGPoint(x:922,y:489),
                 CGPoint(x:1132,y:497),CGPoint(x:1355,y:489),CGPoint(x:1552,y:505),
                 CGPoint(x:514,y:587),CGPoint(x:705,y:595),CGPoint(x:910,y:587),
                 CGPoint(x:1122,y:595),CGPoint(x:1345,y:587),CGPoint(x:1551,y:603), CGPoint(x:524,y:698),
                 CGPoint(x:724,y:689),CGPoint(x:922,y:690),
                 CGPoint(x:1122,y:706),CGPoint(x:1345,y:690),CGPoint(x:1551,y:706)]

还有:

let staticPos1 = [
    (523,409),(723,407),(922,401),(1122,409),(1335,401),(1542,409),(523,496),
    (726,504),(922,489),(1132,497),(1355,489),(1552,505),(514,587),(705,595),
    (910,587),(1122,595),(1345,587),(1551,603),(524,698),(724,689),(922,690),
    (1122,706),(1345,690),(1551,706)
    ].map(CGPoint.init(x:y:))