我在使用此功能时遇到了一些非常令人沮丧的问题:
func degToRad(deg:Int) -> Float {
return deg*(M_PI/180.0)
}
在 return
行我收到一条错误消息:'Int' is not convertible to 'UInt8'
这真让我抓狂。这适用于 Obj-C
。我真的开始质疑 Swift
作为一种语言......
更新
我将函数更新为:
func degToRad(deg:Double) -> CGFloat {
return CGFloat(deg*(M_PI/180.0))
}
但是当我尝试这样使用它时:
CGAffineTransformMakeRotation(CFunctions.degToRad(90))
除了 Double -> CGFloat not convertible 我得到了同样的错误
最佳答案
出于安全原因,Swift 中没有隐式类型转换。您必须将 deg
转换为 Float
。字面量没有隐式类型,可以作为不同类型的数量,但通过首先启动除法,类型被选择,然后才能由 deg
的类型决定。因此,您还必须转换 M_PI/180.0
的结果:
func degToRad(deg: Int) -> Float {
return Float(deg) * Float(M_PI / 180.0)
}
并且可能会用更多的语言来吸引您。这是 AngularMeasure 的便捷枚举:
enum AngularMeasure {
case Degrees(CGFloat)
case Radians(CGFloat)
var degrees: CGFloat {
switch (self) {
case let .Degrees(value):
return value
case let .Radians(value):
return value * CGFloat(180.0 / M_PI)
}
}
var radians: CGFloat {
switch (self) {
case let .Degrees(value):
return value * CGFloat(M_PI / 180.0)
case let .Radians(value):
return value
}
}
}
var measure : AngularMeasure = .Degrees(180)
println(measure.radians) // 3.14159274101257
编辑:
在您的更新中,您试图将实例方法作为类方法来调用。您需要将您的方法定义为类方法:
class func degToRad(deg:Double) -> CGFloat {
return CGFloat(deg*(M_PI/180.0))
}
同样,这是一个可怕的编译器错误。
关于ios - Int 不能转换为 UInt8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24852192/