簡體   English   中英

再次:不可轉換為UInt8

[英]Once again: Not convertible to UInt8

我喜歡Swift,但是它的數字類型轉換怪癖開始讓我發狂……為什么下面的代碼導致LogLevel is not convertible to UInt8 error (在if語句中)?

import Foundation;

enum LogLevel : Int
{
    case System = 0;
    case Trace = 1;
    case Debug = 2;
    case Info = 3;
    case Notice = 4;
    case Warn = 5;
    case Error = 6;
    case Fatal = 7;
}

class Log
{
    struct Static
    {
        static var enabled:Bool = true;
        static var filterLevel:LogLevel = LogLevel.System;
    }

    public class func trace(data:AnyObject!)
    {
        if (Static.filterLevel > LogLevel.Trace) {return;}
        println("\(data)");
    }
}

畢竟,Int類型的LogLevel應該等於Int類型的LogLevel。

“ Swift中的枚舉本身就是一流的類型。

摘自:Apple Inc.“快速編程語言”。iBooks。 https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=881256329

因此,枚舉不是 int,對其進行數學比較是沒有意義的。 您已將原始值與枚舉值相關聯,因此您需要使用toRawfromRaw函數來訪問原始值。

public class func trace(data:AnyObject!)
{
    if (Static.filterLevel.toRaw() > LogLevel.Trace.toRaw()) {return;}
    println("\(data)");
}

Swift書中

使用toRawfromRaw函數在原始值和枚舉值之間進行轉換。

在您的情況下:

if Static.filterLevel.toRaw() > LogLevel.Trace.toRaw() {
    return;
}

暫無
暫無

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

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