我的代码在使用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)]
如何在数组中输入所有这些值,以便编译器接受它们?
谢谢,
答案 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:))