在 Swift3 的 iOS 中向 GET url 添加查询参数
Adding query parameter to the GET url in iOS in Swift3
我有一个 URL 和
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!
我做的对还是有其他修改?请告诉。
除非你继承了 NSURLQueryItem
,否则你的 init 方法是不正确的。根据 Apple's documentation for NSURLQueryItem
,init 方法签名是:
init(name: String, value: String?)
这意味着您的查询项应该像这样创建:
let queryItems = [NSURLQueryItem(name: "timestamp" value: "1234568878788998989"), NSURLQueryItem(name: "isMobile", value: "true")]
这将以您期望的格式将它们正确添加到 url。
试试这个:
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: [=10=], value: as String)
}
return (components.url?.absoluteString)!
}
您可以尝试使用 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
我有一个 URL 和
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!
我做的对还是有其他修改?请告诉。
除非你继承了 NSURLQueryItem
,否则你的 init 方法是不正确的。根据 Apple's documentation for NSURLQueryItem
,init 方法签名是:
init(name: String, value: String?)
这意味着您的查询项应该像这样创建:
let queryItems = [NSURLQueryItem(name: "timestamp" value: "1234568878788998989"), NSURLQueryItem(name: "isMobile", value: "true")]
这将以您期望的格式将它们正确添加到 url。
试试这个:
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: [=10=], value: as String)
}
return (components.url?.absoluteString)!
}
您可以尝试使用 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