在swift中运行已弃用的代码会发生什么?

时间:2017-03-03 18:52:42

标签: swift syntax deprecated

例如在iOS 10中有UserNotifications框架。在此之前,您只需使用:

let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
 application.registerUserNotificationSettings(settings)
 application.registerForRemoteNotifications()

(我在iOS 10上运行了上面的代码,但没有发生任何事情。)

我的一般性问题是:是否会一直运行已弃用的语法崩溃,什么都不做(现在如此)或它的处理方式未知?

我要求更好地调试理解

2 个答案:

答案 0 :(得分:4)

  

它如何对待未知

基本上,这是对的。它可能不会崩溃,但它也不能保证工作。

对于UILocalNotification世界,经验表明,如果您链​​接到iOS 10,您的代码将无法正常工作。您必须切换到新的UNUserNotificationCenter代码。

但这不是通过规则而是通过实验来决定的。

一个可靠的一般规则是,如果当前iOS版本不推荐使用某些内容,请不要使用它。这正是折旧意味着什么。

当然,如果您希望您的代码链接到iOS 10,但要在iOS 10和iOS 9上运行,比如说,您可能必须包含两组完全不同的代码,利用Swift的if #available()语法来响应我们实际运行的系统。在这种特殊情况下,您必须这样做才能管理本地通知。但那是进步的代价。 Apple(故意?)使您难以编写向后兼容的代码。

答案 1 :(得分:1)

弃用意味着Apple可能会在将来随时将其删除。它可能会工作几年,但有一天它会崩溃,你不能说你没有被警告过。如果您正在编写新代码,为什么要从已经过时的东西开始?如果这在您现有的代码中,请考虑在有机会时将其更新为新的API。

弃用警告正是让您有时间执行此操作的工具。