我正在Swift中编写一个函数来检测我点击的六边形。但是我遇到了一个特殊的错误消息,指出我不能添加两个CGFloats。无论我做了什么,例如将let
更改为var
,单独声明和分配,不起作用。我想一定有别的错误,但我找不到。代码如下:
func pointToCoordinate(position: CGPoint) -> (Int, Int) {
var gridHeight = 2 * singleRadius / sqrt(CGFloat(3)) * 1.5
var gridWidth = 2 * singleRadius
var halfWidth = singleRadius
var relativePosition = CGPoint(x: position.x - totalRadius / 2, y: position.y - totalRadius / 2)
println((relativePosition.y / gridHeight))
var row = -(cgfloatToInt)(relativePosition.y / gridHeight)
var column: Int
println((relativePosition.x + halfWidth * CGFloat(row + 1)) / (gridWidth))
column = cgfloatToInt((relativePosition.x + halfWidth * CGFloat(row + 1)) / (gridWidth))
// var innerY: CGFloat = CGFloat(relativePosition.y) + CGFloat(gridHeight * row)
var innerX = relativePosition.x
var innerY = relativePosition.y
innerY = innerY - CGFloat(gridHeight * row)
println((innerX, innerY))
return (column, row)
}
答案 0 :(得分:55)
错误消息错误。问题是您要尝试乘以Int
和CGFloat
。
替换:
innerY = innerY - CGFloat(gridHeight * row)
使用:
innerY = innerY - gridHeight * CGFloat(row)
上面的答案是针对当前版本的代码。对于与您发布的错误消息对应的注释掉的版本:
替换:
var innerY: CGFloat = CGFloat(relativePosition.y) + CGFloat(gridHeight * row)
与
var innerY: CGFloat = CGFloat(relativePosition.y) + gridHeight * CGFloat(row)
答案 1 :(得分:5)
查看所有答案,演员,转换和扩展,我认为对Swift来说最好的解决方案是运算符重载。 Swift 3.0下面的代码示例:
<xsl:template match="LearningStandardItem[not(@RefID[.!='']) or preceding-sibling::LearningStandardItem[@RefID = current()/@RefID]]"/>
将其放入任何类的全局 OUTSIDE 。看到魔法发生。
答案 2 :(得分:2)
确实,还有其他错误,这有效:
import QuartzCore
let a:CGFloat = 1
let b:CGFloat = 2
let c = a + b
var innerY: CGFloat = CGFloat(1.0) + CGFloat(2.0)
和CGFloat
实现FloatingPointType
类型
答案 3 :(得分:0)
迟到加入。根据vacawama的回答,你们都知道问题不是具有相同的数据类型
CGFloat
有时需要多次写入。通过扩展我发现这更容易。所以分享答案。您可以创建一个简单的扩展,如下所示。当然,这种扩展可以进一步修改。
import CoreGraphics
extension Int {
var cgf: CGFloat { return CGFloat(self) }
var f: Float { return Float(self) }
}
extension Float {
var cgf: CGFloat { return CGFloat(self) }
}
extension Double {
var cgf: CGFloat { return CGFloat(self) }
}
extension CGFloat {
var f: Float { return Float(self) }
}
现在我们可以写
innerY = innerY - gridHeight * row.cgf