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

What happens when you run deprecated code in swift?

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

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

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

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

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

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

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

how it treats is unknown

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

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

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

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

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

弃用通常意味着:

  • 有更新的 API 可供使用。
  • 较新的 API cooler/better/more 高效并为您提供更精细的控制。
  • 十分之九,这并不意味着已弃用的 API 将立即停止工作,正如 Matt 所说:不再支持它,移动代码库更安全更新 API.