使用浮点数遍历二维数组时出错
Posted
技术标签:
【中文标题】使用浮点数遍历二维数组时出错【英文标题】:Having Error While iterate through 2D Array using Float 【发布时间】:2017-06-12 06:25:10 【问题描述】:我正在使用二维数组来存储所有坐标,我想将每个坐标分配给 CGPoint
函数,但出现此错误:
不能为 inout[[Float]] 类型的值下标
以下是我的代码:
var entryPoint: [[Float]] = [[130.6,52.3],[167.5,52.1],[204.5,51.91],[243.6,48.91],[281.16,48.75],[167.5,67.41],[204.5,67.91],[243.6,68.5],[281.16,69.16]]
for var x in 0..<entryPoint.count
for var y in 0..<entryPoint[x].count
print(entryPoint[x][y])
let circlePath = UIBezierPath(arcCenter: CGPoint(x: entryPoint[x][y],y: entryPoint[x][y]), radius: CGFloat(0.5), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.cgPath
shapeLayer.fillColor = UIColor.red.cgColor
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 0.8
【问题讨论】:
【参考方案1】:只需将类型 Float
更改为 CGFloat
:
var entryPoint: [[CGFloat]] = [[130.6,52.3],[167.5,52.1],[204.5,51.91],[243.6,48.91],[281.16,48.75],[167.5,67.41],[204.5,67.91],[243.6,68.5],[281.16,69.16]]
另外,你可以这样迭代:
for (index,value) in entryPoint.enumerated()
print("Zero",value[0])
print("One",value[1])
【讨论】:
【参考方案2】:错误具有误导性的问题是 CGPoint(x:y:)
需要 CGFloat
作为参数,而您当前正在传递 Float
值,将 Float
转换为 CGFloat
将减少该错误。
var entryPoint: [[Float]] = [[130.6,52.3],[167.5,52.1],[204.5,51.91],[243.6,48.91],[281.16,48.75],[167.5,67.41],[204.5,67.91],[243.6,68.5],[281.16,69.16]]
for entry in Array(entryPoint.dropFirst())
print(entry[0])
print(entry[1])
let circlePath = UIBezierPath(arcCenter: CGPoint(x: CGFloat(entry[0]),y: CGFloat(entry[1]), radius: CGFloat(0.5), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.cgPath
shapeLayer.fillColor = UIColor.red.cgColor
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 0.8
注意:您还可以创建[[CGFloat]]
类型的数组,而不是[[Float]]
,这也将消除此错误。
【讨论】:
我已将数组类型更改为 CGFLoat 并修复了错误...但是当我分配值时,为什么 CGPoint X 和 Y 值相同? @NgHsiaoQin 检查编辑的答案,你不需要第二个 for 循环 @NiravD 不要强行支持你的答案,也不要在你的修改中复制我的答案。 @SalmanGhumsani 我没有强行投票,答案已经投票了我还没有复制你的答案,你正在循环使用enumerated
,这是不必要的,因为你甚至没有使用索引我也可以说你复制我的答案,因为在你发布答案之前我已经建议了我的笔记中的数组更改
我花了 3 分钟来写我的答案,但我不是你的副本看到我的回答。以上是关于使用浮点数遍历二维数组时出错的主要内容,如果未能解决你的问题,请参考以下文章