数组切片JSONSerialization序列化报错Thread 1: signal SIGABRT如何解决?
如何序列化Swift数组切片到JSON?
嘿,这个问题我之前踩过坑!你遇到的Thread 1: signal SIGABRT错误,核心原因是**JSONSerialization不支持直接序列化ArraySlice类型**。
为什么会报错?
JSONSerialization.data(withJSONObject:)方法要求传入的对象必须是JSON规范支持的顶层类型,比如:
ArrayDictionary- 基础类型(String、Number、Bool、Nil)
而ArraySlice是数组的一个"视图",它并不是标准的Array类型,所以不在JSON序列化的支持列表里,直接传入就会触发崩溃。
解决方法:把切片转换成标准Array
只需要用Array()初始化器把ArraySlice转换成真正的Array,再传入序列化方法就可以了。修改你的代码如下:
let array = [1,2,3,4,5,6] let arraySlice = array[1...3] // 把切片转为Array let convertedArray = Array(arraySlice) // 现在可以正常序列化了 if let jsonData = try? JSONSerialization.data(withJSONObject: convertedArray, options: .prettyPrinted), let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }
运行这段代码,你会得到正确的JSON输出:
[ 2, 3, 4 ]
小提示
虽然ArraySlice和Array共享很多方法,但它的设计是为了高效访问数组的子序列,而不是作为独立的集合类型用于序列化、存储等场景。所以在需要和外部系统(比如JSON)交互时,记得先转换成标准的Array或者Dictionary哦。
内容的提问来源于stack exchange,提问作者Ramesh
相关产品推荐
相关产品推荐

