如何在 Swift 中抑制特定警告
How to suppress a specific warning in Swift
我有一个 Swift 函数做这样的事情:
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
因为__WORDSIZE
是一个常量,所以编译器总是在开关体中给出至少一个警告。实际标记的行取决于我正在构建的目标(例如 iPhone 5 与 6;有趣的是 iPhone 5 给出了 64 位情况的警告,而 iPhone 6 给出了两个32 位和默认的警告)。
我发现 #pragma
的 Swift 等价于 // MARK:
,所以我尝试了
// MARK: clang diagnostic push
// MARK: clang diagnostic ignored "-Wall"
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
// MARK: clang diagnostic pop
但警告仍然存在,MARK
似乎没有效果。
作为解决方法,我现在有这样的东西:
#if arch(arm) || arch(i386)
return 1
#else
#if arch(arm64) || arch(x86_64)
return 2
#else
return 0
#endif
#endif
– 但当然这不一样。有什么提示……?
目前 (Xcode 7.1),似乎无法抑制 Swift 中的特定警告(参见 )。
在你的特殊情况下,你可以欺骗编译器
计算一个字的 字节数 :
func f() -> Int {
switch (__WORDSIZE / CHAR_BIT) { // Or: switch (sizeof(Int.self))
case 4: return 1
case 8: return 2
default: return 0
}
}
这在 32 位和 64 位架构上编译时没有警告。
我有一个 Swift 函数做这样的事情:
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
因为__WORDSIZE
是一个常量,所以编译器总是在开关体中给出至少一个警告。实际标记的行取决于我正在构建的目标(例如 iPhone 5 与 6;有趣的是 iPhone 5 给出了 64 位情况的警告,而 iPhone 6 给出了两个32 位和默认的警告)。
我发现 #pragma
的 Swift 等价于 // MARK:
,所以我尝试了
// MARK: clang diagnostic push
// MARK: clang diagnostic ignored "-Wall"
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
// MARK: clang diagnostic pop
但警告仍然存在,MARK
似乎没有效果。
作为解决方法,我现在有这样的东西:
#if arch(arm) || arch(i386)
return 1
#else
#if arch(arm64) || arch(x86_64)
return 2
#else
return 0
#endif
#endif
– 但当然这不一样。有什么提示……?
目前 (Xcode 7.1),似乎无法抑制 Swift 中的特定警告(参见
在你的特殊情况下,你可以欺骗编译器 计算一个字的 字节数 :
func f() -> Int {
switch (__WORDSIZE / CHAR_BIT) { // Or: switch (sizeof(Int.self))
case 4: return 1
case 8: return 2
default: return 0
}
}
这在 32 位和 64 位架构上编译时没有警告。