gpt4 book ai didi

ios - 什么是Swift预处理器相当于iOS版本检查比较?

转载 作者:IT王子 更新时间:2023-10-29 05:14:02 25 4
gpt4 key购买 nike

我得到了

yld: Symbol not found: _OBJC_CLASS_$_UIUserNotificationSettings

这是导致错误的函数当应用程序在 iOS7 设备上运行时并且甚至根本没有在代码中调用该函数。

func reigsterForRemoteUserNotifications(notificationTypes: UIUserNotificationType, categories: NSSet) {
let userNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: categories)
(UIApplication.sharedApplication()).registerUserNotificationSettings(userNotificationSettings)
UIApplication.sharedApplication().registerForRemoteNotifications()
}

我不希望在 iOS7 设备上运行时可以访问此方法。我不想在其中进行选择检查,因为这意味着该方法可以开始使用。

我想要的是一个构建配置参数来检查版本: 我想不出一种方法来编写快速等效的预处理器宏来检查正确的 iOS 版本并忽略新的和未声明的 iOS 8 库函数。

#if giOS8OrGreater
// declare the functions that are iOS 8 specific
#else
// declare the functions that are iOS 7 specific

#endif

在文档中,Apple 建议使用函数和泛型来替代复杂的宏,但在这种情况下,我需要构建配置预编译检查以避免处理未声明的函数。任何建议。

最佳答案

其他答案都没有提到检查系统版本的正确方法。你绝对不应该使用:Device.systemVersion您不应该制作自定义宏来检查版本号,也不应该超出 Apple 专门为此任务定义的库。

有一篇很棒的文章对此进行了详细说明 here .

请注意,Swift 2.0 允许您通过以下方式直接检查操作系统版本号是否可用:

if #available(iOS 10.0, *) {
// modern code
} else {
// Fallback on earlier versions
}

在 Swift 2.0 之前,推荐的方法是通过提供的系统宏:

    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_9_0) {
// do stuff for iOS 9 and newer
} else {
// do stuff for older versions than iOS 9
}

或通过:

    if NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 10, minorVersion: 0, patchVersion: 0)) {
// modern code
}

对于系统宏以外的任何缺失。

任何其他方法都被淡化为不可靠且不被 Apple 推荐。实际上有一种方法会在 iOS 10 中失效。

请注意,如果您需要在支票中使用类似宏的功能并且您想使用#available,您可以使用this article 中定义的@available因此:

 @available(iOS 7, *)
func iOS7Work() {
// do stuff

if #available(iOS 8, *) {
iOS8Work()
}
}

@available(iOS 8, *)
func iOS8Work() {
// do stuff
if #available(iOS 9, *) {
iOS9Work()
}
}

@available(iOS 9, *)
func iOS9Work() {
// do stuff
}

有关 Swift 中属性的更多信息,您可以引用 Apple's documentation .

关于ios - 什么是Swift预处理器相当于iOS版本检查比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24166919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com