簡體   English   中英

整數不能轉換為UInt8嗎?

[英]Int not convertible to UInt8?

我對此功能有一些非常令人沮喪的問題:

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無法轉換外,我得到相同的錯誤

出於安全原因,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))
}

同樣,這是一個可怕的編譯器錯誤。

要了解的是,沒有數字類型彼此隱式轉換。 因為在開始時就沒有實際類型,但是卻沒有變量,因此進行了強制類型轉換。

唯一的“自然”類型是Int和Double,而Float都不是。 因此,要返回Float,您需要將整個結果轉換為Float:

func degToRad(deg:Int) -> Float {
    return Float(deg*(M_PI/180.0))
}

但這還不夠,因為deg作為Int M_PI ,而M_PI180.0是Double,因此也必須M_PI

func degToRad(deg:Int) -> Float {
    return Float(Double(deg)*(M_PI/180.0))
}

錯誤消息看起來像是編譯器中的當前缺陷,但是錯誤沒有明確將deg強制轉換為Float Swift中沒有隱式類型轉換(從語法上講,因為有時會產生它的錯誤不值得在語法上減少)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM