Syn*_*ete 5 ios swift alamofire objectmapper swift3
我是 swift 3 编程的新手,我正在使用Alamofire进行 api 调用并避免繁琐的 json 配对,我正在使用AlamofireObjectMapper库。我有一个ApiController函数来进行 api 调用,下面是它的代码:
public static func makePostRequest<T: Mappable>(url: String, params: Parameters, networkProtocol: NetworkProtocol, responseClass: T){
let headers = getHeaders()
networkProtocol.showProgress()
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseData{ response in
let json = response.result.value
var jsonString = String(data: json!, encoding: String.Encoding.utf8)
let responseObject = responseClass(JSONString: jsonString!)
switch(response.result){
case .success(_):
networkProtocol.hideProgress()
networkProtocol.onResponse(response: response)
break
case .failure(_):
networkProtocol.hideProgress()
networkProtocol.onErrorResponse(response: response)
break
}
}
Run Code Online (Sandbox Code Playgroud)
我从服务器获取的 Json 响应模板是:
{
"some_int": 10,
"some_array":[...]
}
Run Code Online (Sandbox Code Playgroud)
下面是我的模型类:
import ObjectMapper
class BaseResponse: Mappable {
var some_int: Int?
var some_array: [Array_of_objects]?
required init?(map: Map) {
some_int <- map["some_int"]
some_array <- map["some_array"]
}
func mapping(map: Map) {
}
}
Run Code Online (Sandbox Code Playgroud)
下面是进行 api 调用的类函数:
public static func callSomeApi(params: Parameters, networkProtocol: NetworkProtocol){
ApiHelper.makePostRequest(url: AppConstants.URLs.API_NAME, params: params, networkProtocol: networkProtocol, responseClass: BaseResponse)
}
Run Code Online (Sandbox Code Playgroud)
现在错误在下面一行
let responseObject = responseClass(JSONString: jsonString!)
Run Code Online (Sandbox Code Playgroud)
我无法理解如何转换jsonString为responseClass我从视图控制器接受的通用对象
有人请帮我解决这个问题,在这个问题上停留了很长一段时间。
小智 0
您可以使用 SwiftyJSON: https: //cocoapods.org/pods/SwiftyJSON
以下是一些示例代码可以帮助您:
Alamofire.request(endpointURL, method: .get, parameters: params, encoding: URLEncoding.default, headers: nil).validate().responseJSON()
{
(response) in
if response.result.isFailure
{
print("ERROR! Reverse geocoding failed!")
}
else if let value = response.result.value
{
var country: String? = nil
var county: String? = nil
var city: String? = nil
var town: String? = nil
var village: String? = nil
print("data: \(value)")
let json = JSON(value)
print("json: \(json)")
country = json["address"]["country"].string
county = json["address"]["county"].string
city = json["address"]["city"].string
town = json["address"]["town"].string
village = json["address"]["village"].string
}
else
{
print("Cannot get response result value!")
}
}
Run Code Online (Sandbox Code Playgroud)
请让您知道代码已经被简化(很多行已被删除)并从我的实际项目粘贴到这里,因此该代码未经测试,可能包含拼写错误或类似的内容,但逻辑是可见的
| 归档时间: |
|
| 查看次数: |
11061 次 |
| 最近记录: |