URLComponents

1,494 阅读1分钟
  • 基本操作
var components = URLComponents()
components.scheme = "https"
components.host = "myapi.com"
guard let url = components.url else { return }
print(url) // https://myapi.com
  • URL链接中带上参数
let queryItemToken = URLQueryItem(name: "token", value: "123456")
let queryItemQuery = URLQueryItem(name: "query", value: "Swift")
components.queryItems = [queryItemToken,queryItemQuery]
        
guard let url = components.url else { return }
print(url) // https://myapi.com?token=123456&query=Swift
components.fragment = "five"
components.user = "Roy"
components.password = "mypassword"
// https://Roy:mypassword@myapi.com?token=123456&query=Swift#five
  • 在host增加层级地址
var originURL = URL(string: "https://myapi.com")
originURL = originURL?.appendingPathComponent("users")
guard let resultURL = originURL else { return } 
// https://myapi.com/users
  • URL中参数的一些操作
let originURL = URL(string: "https://myapi.com?token=123456&query=Swift#five")
guard let url = originURL else { return }
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else { return }
// https://myapi.com?token=123456&query=Swift#five
print(components.host ?? "") // myapi.com
print(components.query ?? "") // token=123456&query=Swift
print(components.percentEncodedFragment ?? "") // five
print(components.percentEncodedQuery ?? "") // token=123456&query=Swift
        
guard let queryItems = components.queryItems else { return }
for queryItem in queryItems {
    print("\(queryItem.name) : \(queryItem.value ?? "")")
}