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

Hon*_*ney 2 syntax deprecated swift

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

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

(我在 iOS 10 上运行了上面的代码,但什么也没发生)。

我的一般问题是:运行不推荐使用的语法是否会一直崩溃,什么都不做(就像现在一样)或者它如何处理是未知的?

我要求获得更好的调试理解

mat*_*att 5

它如何治疗是未知的

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

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

但这不是由规则决定的,而是由实验决定的。

一个可靠的一般规则是,如果当前 iOS 版本不推荐使用某些内容,请不要使用它。这正是弃用的含义。

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