【问题标题】:What is the difference between NSURLRequest and URLRequest in Swift?Swift 中的 NSURLRequest 和 URLRequest 有什么区别?
【发布时间】:2017-06-27 00:46:21
【问题描述】:

我正在浏览一些 swift 文档,我发现 NSURLRequest 和 URLRequest 实际上是相同的,并添加了使用 NSURLRequest 的花絮:

当您需要引用语义或其他特定于 Foundation 的行为时。

一种比另一种快吗?在什么情况下应该使用一种而不是另一种?

【问题讨论】:

  • 如果你使用 Swift,你应该使用 URLRequest,因为它是使用 Swift API 设计指南制作的。大多数 Swift API 现在都使用URLRequest,所以如果你使用NSURLRequest,你必须将类型转换为URLRequest

标签: swift cocoa cocoa-touch nsurlrequest


【解决方案1】:

URLRequestNSURLRequest 的叠加层,因此您认为它们本质上是相同的东西是正确的。它们不同的类,但它们旨在提供相同的功能。 NS 版本更像是从 Objective-C 继承而来的遗留 API,而非 NS 版本是“swifty”版本。

这是苹果自己在NSURLRequest上的文档的引用:

Foundation 框架的 Swift 覆盖提供了 URLRequest 结构,它连接到 NSURLRequest 类及其可变 > 子类, NSMutableURL 请求。有关值类型的更多信息,请参阅 Using Swift with Cocoa and Objective-C (Swift 4) 中的 Working with Cocoa Frameworks

此外,当他们决定将 NS 从 Foundation 的多个类中删除时,这是实际的 swift 提案。

https://github.com/apple/swift-evolution/blob/master/proposals/0086-drop-foundation-ns.md

基本上,如果您使用的是 Objective-C,那么您使用的是 NS 版本。如果您使用 Swift,您希望默认使用非 NS 版本,并且仅在您尝试桥接到 Objective-C 或特定库要求您使用 NS 版本时才使用 NS 版本。

【讨论】:

【解决方案2】:

Swift 在 Foundation 中有一个特定的模式,即用 Swift 结构包装一些 NS 类。这方面的例子包括字符串(NSString)、数组(NSArray)、JSONSerialization(NSJSONSerialization)、日期(NSDate)……

尽可能使用包装器,仅在需要时下降到 NS 版本。在这种情况下,除非遇到问题,否则请使用 URLRequest。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2018-03-21
    • 2015-02-10
    • 2017-09-04
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多