核心基础 / 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,但是当我在操场上尝试它时它似乎是一个 整数 ...
CFByteOrder
是 CFIndex
的 typealias
。
它是一个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")
}
我确定对此有一个简单的答案,但我在这里敲了敲我的头。
在我的 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,但是当我在操场上尝试它时它似乎是一个 整数 ...
CFByteOrder
是 CFIndex
的 typealias
。
它是一个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")
}