17

我有一个 Swift 类,它与具有不同部署目标的多个目标相关联,主项目具有 iOS 7 最低要求,并且有一个带有 iOS 8 目标的扩展。

现在当我编译项目时,编译器会在这行代码上抛出警告:

    if #available(iOS 8.0, *) { ... }

“对 'iOSApplicationExtension' 进行不必要的检查;最小部署目标确保保护始终为真”

我检查了构建设置选项,发现没有关闭快速警告的开关。

我试图通过这一行单独定义 iOSApplicationExtension 版本目标但没有成功:

    if #available(iOS 8.0, iOSApplicationExtension 8.0, *) { ... }

有没有办法抑制这个烦人的信息?

4

3 回答 3

2

找到了一个丑陋的解决方法来消除警告,但我希望有更好的方法:

在 iOS 8+ 目标构建设置中,我在 Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flags 中定义了一个预编译标志:

-D iOS8目标

然后我将代码更改为这种方式:

#if iOS8target
    // iOS 8+ compatible code
#else
    if #available(iOS 8.0, *) {
        // repeat iOS 8+ compatible code again!
    } else {
        // iOS 7 code
    }
#endif

它没有重构和丑陋,但它有效!

更新: 有一个快速编译器开关-suppress-warnings可以忽略所有警告。但它也会抑制有用的警告。此外,如果只有一个特定文件发出警告,您可以-w在“构建阶段”窗格中使用标志。它还会抑制有用的警告,但仅限于一个文件。

于 2015-09-12T11:48:43.510 回答
1

Cocoapod 的下一个版本(0.39.0 之后)应该解决这个问题。检查以获取更多详细信息。

于 2015-12-20T23:53:36.993 回答
0

请在 General 中检查您的部署目标,并将其设置为 9.0 到 7.0 或更低。此警告将自动删除。

于 2015-12-28T09:43:12.070 回答