Int不能转换为UInt8?

Arb*_*tur 0 int ios uint8t swift

我对这个功能有一些非常令人沮丧的问题:

func degToRad(deg:Int) -> Float {
    return deg*(M_PI/180.0)
}
Run Code Online (Sandbox Code Playgroud)

在该return行我收到一条错误消息:'Int' is not convertible to 'UInt8'

这真让我疯了.这可以工作Obj-C.我真的开始质疑Swift语言......


UPDATE

我将我的功能更新为:

func degToRad(deg:Double) -> CGFloat {
    return CGFloat(deg*(M_PI/180.0))
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用它时:

CGAffineTransformMakeRotation(CFunctions.degToRad(90))
Run Code Online (Sandbox Code Playgroud)

我得到相同的错误,除了Double - > CGFloat不可转换

dre*_*wag 10

出于安全原因,Swift中没有隐式类型转换.你必须转换degFloat.文字没有隐式类型,可以作为不同类型的数量,但通过首先启动除法,在选择类型之前选择类型deg.因此,您还必须转换结果M_PI/180.0:

func degToRad(deg: Int) -> Float {
    return Float(deg) * Float(M_PI / 180.0)
}
Run Code Online (Sandbox Code Playgroud)

而且可能会更多地吸引你的语言.这是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
Run Code Online (Sandbox Code Playgroud)

编辑:

在更新时,您尝试将实例方法作为类方法调用.您需要将方法定义为类方法:

class func degToRad(deg:Double) -> CGFloat {
    return CGFloat(deg*(M_PI/180.0))
}
Run Code Online (Sandbox Code Playgroud)

同样,这是一个可怕的编译器错误.