莫亚更改网址

Pit*_*Pan 4 ios google-places-api google-maps-sdk-ios swift moya

我尝试使用Google PlacesAPI 调用Moya,但 URL 出现问题。Maya更改我的网址中的字符。在这种情况下,例如在字符?添加%3f和更改,之前%2C。当我将此地址复制并粘贴到网络浏览器中时,我收到错误,但当我删除%3f和更改时%2C,我收到了 API 形式的正确答案。Moya如果我不想更改网址中的这些字符,我应该设置什么?

我的Moya提供者看起来像这样:

extension GooglePlacesService: TargetType {

var baseURL: URL {
    return URL(string: "https://maps.googleapis.com")!
}

var path: String {
    switch self {
    case .gasStation:
        return "/maps/api/place/nearbysearch/json?"
    }
}

var parameters: [String : Any]? {
    switch self {
    case .gasStation(let lat, let long, let type):
        return ["location": "\(lat),\(long)", "type" : "gas_station", "rankby" : "distance", "keyword" : "\(type)", "key" : GoogleKeys.googlePlacesKey]
    }
}

var parameterEncoding: ParameterEncoding {
    switch self {
    case .gasStation:
        return URLEncoding.queryString
    }
}

var method: Moya.Method {
    switch self {
    case .gasStation:
        return .get
    }
}

var sampleData: Data {
    switch self {
    case .gasStation:
        return "".utf8Encoded
    }
}

var task: Task {
    switch self {
    case .gasStation:
        return .request
    }
  }
}


private extension String {
var urlEscaped: String {
    return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
}

var utf8Encoded: Data {
    return self.data(using: .utf8)!
  }
}
Run Code Online (Sandbox Code Playgroud)

生成 Moya 的 URL 看起来像这样(不适用于 API):

https://maps.googleapis.com/maps/api/place/nearbysearch/json%3F?key=MYAPIKEY&keyword=XXXXXX&location=51.0910166687869%2C17.0157277622482&rankby=distance&type=gas_station

与 API 配合使用的 URL:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=MYAPIKEY&keyword=XXXXXX&location=51.0910166687869,17.0157277622482&rankby=distance&type=gas_station

Vit*_*pov 5

我对“?”也有同样的问题 转换为“%3F”: 在此输入图像描述

解决方案是保留没有棘手符号(如“?”、“、”)的路径,并将它们放入Moya 设置的var Task中,并使用URLEncoding.default代替: 在此输入图像描述 在此输入图像描述