2015-11-04 42 views
7

一个特定的警告我有一个雨燕功能做这样的事情:如何抑制斯威夫特

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// 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 

- 但当然这是不一样的。任何提示......?

+1

目前,您无法在Swift代码中抑制特定警告(请参阅http://stackoverflow.com/questions/31540446/how-to-silence-a-warning-in-swift-2-0)。作为一种解决方法,你可以改用'sizeof(Int.self)'(4或8)。 - 知道*为什么你需要这个功能会很有趣。 –

+0

谢谢,您的解决方案有效。对于代码,请参阅此处:http://stackoverflow.com/questions/24007129/how-does-one-generate-a-random-number-in-apples-swift-language - 通过jstn回答。 – Stefan

+1

我以前没见过,但这里http://stackoverflow.com/a/31429991/1187415是一个(非常相似)的解决方案,它不需要在字大小上的开关。 –

回答

6

目前(Xcode 7.1),似乎没有办法在Swift中抑制特定的警告(例如参见How to silence a warning in 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位架构的警告。

+0

谢谢,这个作品! :-) – Stefan