swift - 有没有一种 Swifty 方法可以使用字符串插值来解包可选值?

标签 swift option-type

我正在使用从用户那里收集的值构建一个 RESTful API 查询。其中一些值可能未提供,因此我使用可选值。有 Double、Int 和 String 值。我使用的代码看起来很笨重。有没有一种更简洁、Swifty 的方法来编写这段代码?

''' swift

let baseURL = "http......"

// Start with required parms
let format = "?format=\(parms.format)"
let endTime = "&endtime=\(parms.endDate)"

// now for optionals
let startTime = parms.startDate != nil ? "&starttime=\(parms.startDate!)" : ""

// Sorted by
let orderby = parms.orderby != nil ? "&orderby=\(parms.orderby!)" : ""
// parts.limit is Int?
let limit = parms.limit != nil ? "&limit=\(parms.limit!)" : ""

var strURL: String
strURL = "\(baseURL)\(format)\(startTime)\(endTime)\(orderby)\(limit)"

'''

我得到了我需要的结果。例如,如果用户没有提供 StartDate 参数,则查询字符串中不会引用它。

''' https://.....?format=geojson&endtime=2019-05-31&orderby=magnitude&minmagnitude=5&limit=2000 '''

但我有种错过 Swift Optionals 的感觉

最佳答案

不要通过连接字符串来构建 URL。使用 URLComponents 和一组 URLQueryItems

然后您可以:

  • 如果值为 nil,则不向查询项数组添加项
  • 使用 nil value 字符串创建它们并在完成后进行过滤。
  • 对每个可选参数使用 flatMap 做一些事情:
parms.startDate.flatMap { 
   parameters.append(URLQueryItem(name: "startttime", value: "\($0)"))
}

关于swift - 有没有一种 Swifty 方法可以使用字符串插值来解包可选值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56396363/

相关文章:

swift - 从可选的通用扩展返回 nil

Swift:可选下标的可选链接

ios - 解包读取 JSON 的可选值时意外发现 nil

ios - 将 UIWindow 声明为 let 而不是可选的 var 可以很好地编译。有什么陷阱吗?

ios - 如何将图像放在 UIActionSheet 上?

ios - 如何在开始/完成 iOS 测试时运行/终止 shell 命令?

ios - 如何在 UITabBarController 中获取特定 UIViewController 的索引

java - 如何使用方法引用创建可重用的可选映射?

ios - 试图理解类型属性,例如 static 和 swift 的 class 关键字

ios - 无法快速分配值类型不匹配