sizeof() 给出数组参数的错误
sizeof() gives an error for array argument
在 swift 中转换旧 Objective C 代码时遇到错误,在尝试所有其他解决方案后仍未解决。
Objective 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 代码中看到这里 - 无法在 for
循环中直接使用 sizeof()
。所以我创建了新变量 pointLimit
来简化复杂性。
var pointLimit : Int = sizeof(graphPoint) / sizeof(CGPoint)
行仍然显示错误
binary operator / cannot be applied to two int operands
我理解错误但无法简化它。
您可以像这样遍历数组:
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
}
}
我经常遇到这个错误 "operator X cannot be applied to two Y operands",通常问题出在其他地方,在这种特殊情况下是因为 Swift sizeof
使用类型而不是 var 作为 Glenn说。
您已有积分。所以使用 'count' 属性.
for var index = 0; index < graphPoint.count; index++ {
或者按照 Axel 的回答。
在 swift 中转换旧 Objective C 代码时遇到错误,在尝试所有其他解决方案后仍未解决。
Objective 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 代码中看到这里 - 无法在 for
循环中直接使用 sizeof()
。所以我创建了新变量 pointLimit
来简化复杂性。
var pointLimit : Int = sizeof(graphPoint) / sizeof(CGPoint)
行仍然显示错误
binary operator / cannot be applied to two int operands
我理解错误但无法简化它。
您可以像这样遍历数组:
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
}
}
我经常遇到这个错误 "operator X cannot be applied to two Y operands",通常问题出在其他地方,在这种特殊情况下是因为 Swift sizeof
使用类型而不是 var 作为 Glenn说。
您已有积分。所以使用 'count' 属性.
for var index = 0; index < graphPoint.count; index++ {
或者按照 Axel 的回答。