Swift字符串被截断/无法容纳足够的内容

移动开发 2026-07-12

我正打算做一个使用wkwebview和 JavaScript的东西……因此在字符串方面遇到了严重的问题。

它们太短了,意思是容量不够。我知道字符串的容量很大,理论上可以把圣经塞进去之类的……然而我确实遇到了麻烦。首先,从postMessage收到的JSON回复被截断了,因此我不得不开始创建将JSON拆成若干部分的方法……并不理想,根本不理想……总之。

我的脚本在这里:

var script: String = ""

        script += """

            let json = JSON.parse(data);
            if (json && json['cargo'] && json['cargo']['loads'] && Array.isArray(json['cargo']['loads']) && Object.keys(json['cargo']['loads']).length > 0 && json['cargo']['loads'][0]['id']) {
                var obj = new Object();
                obj.id = json['cargo']['loads'][0]['id'];
                obj.ordererReference = json['cargo']['loads'][0]['ordererReference'];
                obj.fromname = json['cargo']['loads'][0]['consignorName];
                obj.fromstreet = json['cargo']['loads'][0]['consignorStreetAddr'];
                obj.frompost = json['cargo']['loads'][0]['consignorPostCode'] + " " + json['cargo']['loads'][0]['consignorPostOffice'];
                obj.fromphone = json['cargo']['loads'][0]['consignorPhone'];
                obj.fromcoords = json['cargo']['loads'][0]['consignorCoordinateX'] + "," + json['cargo']['loads'][0]['consignorCoordinateY'];
                obj.toname = json['cargo']['loads'][0]['consigneeName'];
                obj.tostreet = json['cargo']['loads'][0]['consigneeStreetAddr'];
                obj.topost = json['cargo']['loads'][0]['consigneePostCode'] + " " + json['cargo']['loads'][0]['consigneePostOffice'];
                obj.tophone = json['cargo']['loads'][0]['consigneePhone'];
                obj.tocoords = json['cargo']['loads'][0]['consigneeCoordinateX'] + " " + json['cargo']['loads'][0]['consigneeCoordinateY'];
                obj.toemail = json['cargo']['loads'][0]['consigneeEmail'];
                obj.organizer = json['cargo']['loads'][0]['responsiblePerson'];
                obj.organizerPhone = json['cargo']['loads'][0]['responsiblePhone'];
                obj.loadArrive = json['cargo']['loads'][0]['loadingPlaceArrival'];
                obj.loadBegun = json['cargo']['loads'][0]['fetchTimeRealisationStart'];
                obj.loadEnd = json['cargo']['loads'][0]['fetchTimeRealisation'];
                obj.deliveryArrive = json['cargo']['loads'][0]['deliveryPlaceArrival'];
                obj.deliveryBegun = json['cargo']['loads'][0]['deliveryTimeRealisationStart'];
                obj.deliveryEnd = json['cargo']['loads'][0]['deliveryTimeRealisation'];
                obj.waybill = json['cargo']['loads'][0]['waybillPdfUrl'];
                obj.comments = json['cargo']['loads'][0]['comments'];
                window.webkit.messageHandlers.openLoadDetails.postMessage(JSON.stringify(obj));
            } else {
                window.webkit.messageHandlers.requestError.postMessage("failed to get load details")
            }
        """

而script字符串变量的内容是:

let json = JSON.parse(data);
    if (json && json['cargo'] && json['cargo']['loads'] && Array.isArray(json['cargo']['loads']) && Object.keys(json['cargo']['loads']).length > 0 && json['cargo']['loads'][0]['id']) {
        var obj = new Object();
        obj.id = json['cargo']['loads'][0]['id'];
        obj.ordererReference = json['cargo']['loads'][0]['ordererReference'];
        obj.fromname = json['cargo']['loads'][0]['consignorName];
        obj.fromstreet = json['cargo']['loads'][0]['consignorStreetAddr'];
        obj.frompost = json['cargo']['loads'][0]['consignorPostCode'] + " " + json['cargo']['loads'][0]['consignorPostOffice'];
        obj.fromphone = json['cargo']['loads'][0]['consignorPhone'];
        obj.fromcoords = json['cargo']['loads'][0]['consignorCoordinateX'] + "," + json['cargo']['loads'][0]['consignorCoordinateY'];
        obj.toname = json['cargo']['loads'][0]['consigneeName'];
        obj.tostreet = json['cargo']['loads'][0]['consigneeStreetAddr'];
        obj.topost = json

是的,截断就发生在这里。我起初以为会有一个“看不见”的字符导致的……但并非如此。然后我尝试在这之后再往字符串追加,结果仍然一样,我追加的第二段字符串……就“消失”了。

好吧,也许有一些我看不见的东西……于是我把内容全部清空。打开一个关于Swift的维基百科页面,从那里拷贝一段相当长的内容,粘贴进script变量中——只是为了看看是否会再次发生,结果那篇文章也被截断。

到底是怎么回事???怎么才能得到一条“很长的字符串”?是不是在某处的项目设置出了错,从而限制了字符串的最大长度?太让人沮丧了……

我试着搜索,但似乎这不是一个很常见的问题——或者是我用的关键词不对……

解决方案

这是一个JavaScript错误。出现在这一行:

 obj.fromname = json['cargo']['loads'][0]['consignorName];

缺少一个引号。还有…… NSLog会截断输出。Print不会——这点值得知道。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章