iOS开发求助:NSMutableArray中字符串打印反斜杠重复问题
解决NSMutableArray打印时显示双反斜杠的问题
首先得明确:你的字符串myText本身存储的内容是完全正确的,打印数组时出现双反斜杠只是因为NSMutableArray的默认打印方式(description方法)会对字符串里的转义字符进行二次转义展示,并不是实际存储的内容变了。
问题原因拆解
- 当你直接打印
myText时,Swift会直接输出字符串的实际内容,所以看到的是2018\/04\/16(这里的\/是转义后的正斜杠,实际存储的是2018/04/16)。 - 但当你打印
NSMutableArray时,数组会调用每个元素的description方法,对于NSString来说,它的description会把字符串里的转义字符再次转义,所以原本的单个反斜杠会变成两个,用来表示这是一个字面量的反斜杠(虽然你实际要的是转义后的正斜杠)。
解决方案
如果你希望打印数组时能看到"2018/04/16"的结果,可以试试以下几种方式:
1. 遍历数组逐个打印元素
直接遍历数组,单独打印每个字符串,这样就会用Swift的字符串打印逻辑,输出实际内容:
var arr = NSMutableArray() let myText = "2018\\/04\\/16" arr = [myText] // 遍历打印每个元素 for element in arr { if let text = element as? String { print(text) } } // 输出:2018/04/16
2. 手动拼接数组的打印内容
自定义数组的输出格式,把每个元素转换成正确的字符串后再拼接:
let customDescription = arr.compactMap { $0 as? String }.joined(separator: ", ") print("[\(customDescription)]") // 输出:[2018/04/16]
3. 提前处理字符串(如果不需要转义的话)
如果你的原始字符串不需要保留转义的反斜杠,其实可以直接定义成不带转义的形式:
let myText = "2018/04/16" // 直接用正斜杠,不需要转义 var arr = NSMutableArray(array: [myText]) print(arr) // 输出:("2018/04/16")
补充说明
永远记住:打印出来的内容只是调试时的展示形式,实际存储在数组里的字符串内容并没有变化。你可以通过访问数组元素并使用字符串操作来验证这一点,比如:
if let storedText = arr.firstObject as? String { print(storedText == "2018/04/16") // 输出 true }
内容的提问来源于stack exchange,提问作者Begineers
相关产品推荐
相关产品推荐

