RxSwift中URLSession获取字符串响应仅打印字节数、无完整输出
问题根因
控制台只输出类似4676 bytes的内容,本质是对Swift中Data类型的属性使用有误:
- 直接调用
data.description获取到的是Data对象的元描述信息,只会展示当前二进制数据的总字节长度,不会把数据本身转成可读文本输出 - 现有代码把字节长度的描述当成了接口返回的字符串,自然无法打印出完整的接口内容
修正方案
调整map闭包逻辑,主动用UTF-8编码把二进制Data转成可读字符串,再执行打印和返回。
替换后的代码:
let request = URLRequest(url: URL(string:"https://itunes.apple.com/search?term=\(query)&limit=\(size)&media=\(mediatype)")!) return URLSession.shared.rx.data(request: request) .map { data -> String in // 以UTF-8编码转码二进制数据,增加转码失败的兜底逻辑 guard let fullResponse = String(data: data, encoding: .utf8) else { return "响应字符串转码失败" } // 打印完整返回内容,避免被NSLog的字符串拼接逻辑截断 NSLog("iTunes接口完整返回:\n%@", fullResponse) return fullResponse }
日常调试提醒
- 打印网络返回时,不要直接把Data对象传入
print/NSLog,否则控制台永远只会输出字节长度的元信息 - 如果遇到接口返回中文乱码,可以尝试把编码参数切换为
.isoLatin1做兼容;iTunes官方搜索接口返回标准UTF-8内容,无需额外做编码适配 - 若Xcode控制台依然截断长日志,可以在控制台的输出设置里调高单条日志的最大展示长度,避免长文本被自动折叠
内容的提问来源于stack exchange,提问作者ramibad560
相关产品推荐
相关产品推荐

