在 Swift3 中将查询参数添加到 iOS 中的 GET url

Posted

技术标签:

【中文标题】在 Swift3 中将查询参数添加到 iOS 中的 GET url【英文标题】:Adding query parameter to the GET url in iOS in Swift3 【发布时间】:2017-08-03 05:56:25 【问题描述】:

我有一个网址

https://api.asiancar.com/api/applicationsettings

它基本上是一个 GET url,所以我需要传递一个 boolean "isMobile" 和 timestamp 作为查询参数。如何在通过查询后将其作为最终 URL 将如下所示:

https://api.asiancar.com/api/applicationsettings?timestamp=111122244556789879&isMobile=true

let queryItems = [
    NSURLQueryItem(timestamp: "1234568878788998989", isMobile: true),
    NSURLQueryItem(timestamp: "1234568878788998989", isMobile: true)
]
let urlComps = NSURLComponents(string: "www.api.asiancar.com/api/applicationsettings")!
urlComps.queryItems = queryItems
let URL = urlComps.URL!

我做得对还是有任何其他修改?请告诉。

【问题讨论】:

您可以先创建一个url字符串,然后使用let URL = URL(string: "")创建最终的URL。 请发表答案 尽管接受的答案在技术上可行,但我强烈建议您查看我的答案并继续使用 url 组件。一旦您习惯了它们,它们就会更加灵活且不易出错 【参考方案1】:

除非你有子类NSURLQueryItem,那么你的 init 方法是不正确的。根据Apple's documentation 为NSURLQueryItem,init 方法签名是:

init(name: String, value: String?)

这意味着您的查询项应该这样创建:

let queryItems = [NSURLQueryItem(name: "timestamp" value: "1234568878788998989"), NSURLQueryItem(name: "isMobile", value: "true")]

这会将它们以您期望的格式正确添加到 url。

【讨论】:

【参考方案2】:

试试这个:

let API_PREFIX = "www.api.asiancar.com/api/applicationsettings"

 var url : URL? = URL.init(string: API_PREFIX + queryItems(dictionary: [name: "isMobile", value: "true"] as [String : Any]))

func queryItems(dictionary: [String:Any]) -> String 
        var components = URLComponents()
        print(components.url!)
        components.queryItems = dictionary.map 
            URLQueryItem(name: $0, value: $1  as String)
        
       return (components.url?.absoluteString)!
    

【讨论】:

【参考方案3】:

您可以尝试使用 String 的替代方法

let baseUrlString = "https://api.asiancar.com/api/"
let timeStamp = 1234568878788998989
let isMobile = true
let settingsUrlString = "\(baseUrlString)applicationsettings?timestamp=\(timeStamp)&isMobile=\(isMobile)"
print(settingsUrlString)
let url = URL(string: settingsUrlString)

输出:https://api.asiancar.com/api/applicationsettings?timestamp=1234568878788998989&isMobile=true

【讨论】:

以上是关于在 Swift3 中将查询参数添加到 iOS 中的 GET url的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 iOS 7 中将 PHG 附属参数添加到这些新的 App Store 启动 URL?

如何在 Swift 3 中将 NSConstraints 添加到 UITextView

如何在 swift 3 中将滑动手势添加到 AVPlayer

使用 Swift 3 在 iOS 10 中将图像从服务器加载到 Apple Map 中的注释视图

在 GraphQL 中将参数从根传递到子查询

如何在 swift 3.0 中将此类参数发送到服务器调用