You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alamofire纯布尔值响应解析失败求助:仅可修改指定方法

解决方案

问题出在SwiftyJSON的初始化方式错误,以及未处理Alamofire解析纯布尔值可能出现的边界情况:

1. 修改firebaseTokenService方法

原代码直接用response.data初始化SwiftyJSON,未利用Alamofire已经解析好的JSON结果;同时补充手动解析的 fallback 逻辑,兼容服务器返回纯文本布尔值的场景:

func firebaseTokenService(request: URLRequestConvertible, completion: @escaping (_ httpResponse: HTTPURLResponse?, _ responseObject:JSON?, _ error: Error?) -> Void)  {
    session.request(request, interceptor: nil).validate().responseJSON { (response) in
        switch response.result {
        case .success(let parsedValue):
            // 用Alamofire解析后的结果初始化SwiftyJSON,直接拿到布尔值
            let json = JSON(parsedValue)
            completion(response.response, json, nil)
        case .failure(let error):
            // 若JSON解析失败(比如服务器返回text/plain格式的"true"/"false"),手动解析
            if let data = response.data, let responseStr = String(data: data, encoding: .utf8) {
                let boolResult = responseStr.lowercased() == "true"
                completion(response.response, JSON(boolResult), nil)
            } else {
                completion(response.response, nil, error)
            }
        }
    }
}

2. 调用逻辑无需修改

原有的闭包判断逻辑可以正常工作,现在jsonData?.boolValue能正确获取接口返回的布尔值:

NetworkManager.shared().firebaseTokenService(request: APIRouter.firebasetoken(param as [String : Any]), completion: { (httpResponse, jsonData, error) in
    if httpResponse?.statusCode == 200 {
        if let responseText = jsonData?.boolValue {
            print(responseText ? "Success to send fcm token" : "Failed to send fcm token")
        } else {
            print("Invalid response format")
        }
    } else {
        print("Failed to send fcm token", error?.localizedDescription ?? "")
    }
})

关键说明

  • Alamofire的responseJSON支持解析顶级布尔值(符合JSON规范),直接使用result.value即可拿到解析后的布尔值,无需手动处理原始Data。
  • 补充手动解析逻辑是为了兼容服务器可能返回的纯文本格式(如直接返回字符串"true"而非JSON布尔值),避免解析失败导致的jsonData为nil。

内容的提问来源于stack exchange,提问作者Sagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:22:46