核心基础 / Swift 2:CFByteOrderGetCurrent() 的结果

Core Foundation / Swift 2: result of CFByteOrderGetCurrent()

我确定对此有一个简单的答案,但我在这里敲了敲我的头。

在我的 Swift 2 代码 (Xcode 7.2.1) 中,我使用 CFByteOrderGetCurrent() 获取本地机器的字节顺序。

我不知道如何计算函数的结果 - 下面的 'if' 语句编译失败

"type of expression is ambiguous without more context":

import Foundation
let byteOrder = CFByteOrderGetCurrent()
if byteOrder == .CFByteOrderLittleEndian {    // compilation fails here
    /* do something */
}

CF documentation 我期望函数的结果是一个 enum,但是当我在操场上尝试它时它似乎是一个 整数 ...

CFByteOrderCFIndextypealias

它是一个enum,由以下值组成:

CFByteOrderUnknown,
CFByteOrderLittleEndian,
CFByteOrderBigEndian

因此,CFByteOrderLittleEndian对应于1

为了进行比较,可能需要执行以下操作:

if byteOrder == CFByteOrder(1)
{
    print(byteOrder)
}

1这里对应的是CFByteOrderLittleEndian.

我使用了一些不同的技巧...

if 1.littleEndian == 1 {
    print("little endian")
} else {
    print("big endian")
}

一般

let isLittleEndian = 1.littleEndian == 1

在小端系统上为真,在大端系统上为假。优点是,它适用于所有平台

好的,我终于破解了如何使用符号常量进行比较。

如果将 CFByteOrderGetCurrent() 的结果转换为 UInt32,则可以将其与枚举中常量的原始值进行比较:

import Foundation

let hostByteOrder = UInt32(CFByteOrderGetCurrent())

if hostByteOrder == CFByteOrderLittleEndian.rawValue {
    print("little")
}