【问题标题】:safe unwrap URL type安全解包 URL 类型
【发布时间】:2022-11-30 23:06:11
【问题描述】:

我正在形成一个 url 以在请求旁边传递,作为回报我的应用程序崩溃,因为它意外地发现 nil,当 debuggin -> 我确实有 url,所以我的问题是,我如何避免在这里使用强制解包? 当我使用 guard 或 if let 时,我应该返回什么?网址?它将再次成为可选的。 制造 var url: URL? 对我也不好。

public var url: URL {
    var components = URLComponents()
    components.scheme = scheme
    components.host = ipAddress
    components.path = endpoint
    components.port = port
    components.queryItems = urlQueryItems
    return components.url!.removingPercentEncoding!
}

【问题讨论】:

  • 没有上下文,没有人能够告诉您应该为无效的 URL 使用什么默认值。这个网址代表什么?输入是动态的吗?您可以使用有意义的默认 URL 吗?如果没有,您需要停止使用无法创建的 URL 的上下文。
  • removingPercentEncoding 似乎适得其反,因为 URLComponents 在必要时动态添加百分比编码。

标签: swift url swift-optionals


【解决方案1】:

切勿使用感叹号。它方法“让我崩溃”。当你崩溃,因为这正是你所说要做的。

如果 components.url 结果是 nil,则您没有任何有用的返回值,这肯定会发生(如您所见)。因此,只需将您的 public var url: URL 更改为返回 URL? 即可。然后返回components.url。这让调用者有责任检查url是否是nil,并且它可以通过使用通常的if let url舞蹈安全地展开。

【讨论】:

  • 请注意,if let 舞蹈在 Xcode 14 中得到了极大的平滑;你不再需要说if let url = url
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 2020-11-09
  • 2013-11-30
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多