ios - Int 不能转换为 UInt8?

标签 ios swift int uint8t

我在使用此功能时遇到了一些非常令人沮丧的问题:

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/

相关文章:

ios - 如何更改边框自定义边的颜色?

ios - 归档时xcode没有这样的模块错误

ios - 具有多个并行DB访问的iOS-App设计

ios - 无法更改父类/viewcontroller 中的 UIView 属性?

arrays - 仅在发出多个请求后调用函数

c++ - 使用 vector 进行归并排序 (int) C++

java - 在 java 中初始化字节数组时,什么时候必须转换为字节?

java - 每个 python 对象一个 int

ios - 在 XCode 9 中启动模拟器(不是 headless 的)

ios - 当导航栏隐藏时,如何保持网页标题可见,就像在 iOS Safari 中一样?