如果你设置了
responseSerializer
作为
AFHTTPResponseSerializer
使用:
manager.responseSerializer = AFHTTPResponseSerializer()
,然后
responseObject
应该是
(NS)Data
反对。
做什么:
获取的值
"//"
(我们称之为
prefixData
)中。
检查是否
响应对象
有它的前缀。
必要时拆下。
let prefixData = "//".data(using: .utf8)!
let responsePrefix = responseObject.subdata(in: Range(0..<2))
if responsePrefix == prefixData {
let jsonData = responseObject.subdata(in: Range(2..<responseObject.count))
}
使用强制展开和静默尝试(try?)的示例代码(不要那样做)为了逻辑:
let prefixData = "//".data(using: .utf8)!
print("prefixData from String: \(prefixData as NSData)")
let prefixData2 = Data(bytes: [0x2F, 0x2F])
print("prefixData from Bytes: \(prefixData2 as NSData)")
if prefixData == prefixData2 {
print("prefixData == prefixData2, use the one you want")
}
let responseObject = "//{\"key\":\"value\"}".data(using: .utf8)!
print("responseObject: \(responseObject as NSData)")
let responsePrefix = responseObject.subdata(in: Range(0..<2))
if responsePrefix == prefixData {
let jsonData = responseObject.subdata(in: Range(2..<responseObject.count))
print("jsonData: \(jsonData as NSData)")
let json = try? JSONSerialization.jsonObject(with: jsonData, options: [])
print("json: \(json!)")
let jsonString = String(data: jsonData, encoding: .utf8)
print("jsonString: \(jsonString!)")
}
输出:
$>来自字符串的前缀数据:<2F2F>
$>来自字节的前缀数据:<2F2F>
$>prefixdata==前缀数据2,使用所需的
$R.2F2F7B22 6B65 7922 3A227 661 6C75 65 22 7D & GT;
$>jsondata:<7B226B65 79223A22 76616C75 65227D>
$>json:可选({
key=值;
})
$>jsonstring:{“key”:“value”}