sizeof()给出数组参数的错误

时间:2015-09-15 07:30:46

标签: ios swift arraylist sizeof cgfloat

在swift中转换旧的Objective C代码时遇到错误,在尝试所有其他解决方案后无法解决。

目标C

CGPoint graphPoint[] = { {0.0, 0.0}, {0.0, 20.0}, {20.0, 20.0}, {10.0, 0.0} };
CGFloat radius = 0.0;
for (int i = 0; i < sizeof(graphPoint) / sizeof(CGPoint); i++) {
    CGPoint a = graphPoint[i];
    CGFloat b = sqrt( pow(a.x - point.x, 2.0) + pow(a.y - point.y, 2.0) );
    if (b > radius) {
        radius = b;
    }
}

忽略它作为方法参数的point变量。

这里的要点是sizeof在Swift代码中出错。我试着尽可能简单易懂地理解swift编译器仍然没有成功。

Swift代码:

let graphPoint = [[0.0, 0.0], [0.0, 20.0], [10.0 20.0], [10.0, 0.0]]
let radius = CGFloat(0.0)
var pointLimit : Int = sizeof(graphPoint) / sizeof(CGPoint)

for var index = 0; index < pointLimit; index++ {
    let a = graphPoint[index]
    let b = sqrt(pow(a.x - point.x, 2.0) + pow(a.y - point.y, 2.0))
    if b > radius {
            radius = b
    }
}

如果您可以在Objective C代码中看到 - 在sizeof()循环中无法直接使用for。所以我创建了新的变量pointLimit来简化复杂性。

仍然是var pointLimit : Int = sizeof(graphPoint) / sizeof(CGPoint)行显示错误

binary operator / cannot be applied to two int operands

我理解错误但无法简化错误。

2 个答案:

答案 0 :(得分:2)

您可以像这样迭代数组:

    let graphPoint = // ...
    var radius = CGFloat(0.0)

    for a in graphPoint {
        let b = sqrt(pow(a.x - point.x, 2.0) + pow(a.y - point.y, 2.0))
        if b > radius {
            radius = b
        }
    }

我经常遇到这个错误“操作符X不能应用于两个Y操作数”,通常问题来自其他地方,在这种特殊情况下,这是因为Swift sizeof使用的类型而不是var作为Glenn说。

答案 1 :(得分:0)

你已经拥有多少分。所以使用'count'属性。

for var index = 0; index < graphPoint.count; index++ {

或遵循Axel的回答。