Arb*_*tur 0 int ios uint8t swift
我对这个功能有一些非常令人沮丧的问题:
func degToRad(deg:Int) -> Float {
    return deg*(M_PI/180.0)
}
在该return行我收到一条错误消息:'Int' is not convertible to 'UInt8'
这真让我疯了.这可以工作Obj-C.我真的开始质疑Swift语言......
UPDATE
我将我的功能更新为:
func degToRad(deg:Double) -> CGFloat {
    return CGFloat(deg*(M_PI/180.0))
}
但是当我尝试使用它时:
CGAffineTransformMakeRotation(CFunctions.degToRad(90))
我得到相同的错误,除了Double - > CGFloat不可转换
dre*_*wag 10
出于安全原因,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))
}
同样,这是一个可怕的编译器错误.
| 归档时间: | 
 | 
| 查看次数: | 9667 次 | 
| 最近记录: |