Swift字符串莫名截断/容量不足的问题求助
Swift字符串莫名截断/容量不足的问题求助
兄弟,太懂你这种明明理论上Swift字符串能装下整本圣经,结果自己的代码/文本却莫名被截断的憋屈感!我帮你梳理几个最可能的原因和解决办法:
先排除最常见的「调试器假象」
Xcode的调试器变量视图为了界面整洁,会自动截断过长的字符串,不是你的字符串真的被截断了,只是显示不全而已!你可以做两个验证:
- 在代码里加一行
print("字符串长度:\(script.count)"),看看实际字符数是不是符合预期; - 直接用
print(script)把完整内容输出到控制台,控制台里的内容是不会被截断的,能看到真实的字符串全貌。
顺便提一句你的JS代码语法错误
看你贴的JS代码里,这一行有个明显的语法错误:
obj.fromname = json['cargo']['loads'][0]['consignorName];
consignorName 后面少了一个闭合的单引号 ',虽然这不会导致Swift字符串截断,但会导致JS执行失败,建议先补上。
若真的是字符串内容被截断(排除调试显示后)
如果控制台输出也确实截断了,那试试换一种字符串创建方式:
- 把JS代码放到本地的
.js文件中(比如新建LoadDetailsScript.js),然后通过Bundle读取文件内容:
guard let scriptURL = Bundle.main.url(forResource: "LoadDetailsScript", withExtension: "js"), let script = try? String(contentsOf: scriptURL, encoding: .utf8) else { print("读取脚本失败") return }
这种方式能避免多行字符串拼接时可能出现的隐藏转义或编码问题,也更便于维护JS代码。
关于WKWebView postMessage的截断问题
你提到之前JSON回复被截断,WKWebView的postMessage确实有默认的消息大小限制(不同系统版本可能略有不同),如果是这个问题,可以考虑:
- 把大的JSON拆分成多个小消息分批发送;
- 用
WKUserScript注入JS时,直接通过回调把数据传递到原生,或者用文件共享等方式传递大内容。
总的来说,90%的概率是调试器显示的问题,先去控制台打印验证一下,应该就能解开疑惑啦!
备注:内容来源于stack exchange,提问作者osku
相关产品推荐
相关产品推荐

