Swift多行字符串如何保留末尾重要空格且不含换行?
这个问题确实挺常见的——既要用Swift的多行字符串保留行尾空格,又不想最后一行带换行符,还得避开编辑器自动删行尾空格的坑。给你几个实用的解决方案:
方案1:用dropLast()移除末尾换行符
这是最省心的方法,先按正常逻辑写多行字符串(用\转义换行来锁定前面行的尾空格),最后调用dropLast()去掉默认生成的末尾换行符:
let asciiArt = """ \ / \ V """.dropLast()
原理很简单:
- 每行末尾的
\会让Swift忽略该行的换行符,同时保留行尾的所有空格(编辑器也不会乱删,因为\的存在让行尾不是单纯的空白)。 - 最后一行我们不用
\,这样多行字符串会默认在末尾加一个换行符,dropLast()刚好把这个多余的换行符砍掉,同时完整保留最后一行的尾空格。
方案2:用Unicode转义空格锁定最后一行的空格
如果不想额外调用方法,可以把最后一行的尾空格写成Unicode转义序列\u{0020},这样编辑器不会自动删除,而且多行字符串末尾不会带换行符:
let asciiArt = """ \ / \ V\u{0020} """
这个方法的好处是字符串本身就是你想要的最终形态,不需要后续处理,适合对字符串完整性有要求的场景。
方案3:把最后一行和结束分隔符放同一行
另一个小技巧是直接把最后一行内容和"""放在同一行,这样既可以保留尾空格,又不会产生换行符:
let asciiArt = """ \ / \ V """
不过要注意:如果你的编辑器(比如Xcode)开了自动删除行尾空格的设置,可能会悄悄删掉V后面的空格。这时候可以结合方案2的思路,用Unicode转义空格兜底:
let asciiArt = """ \ / \ V\u{0020}"""
这样不管编辑器怎么折腾,空格都会稳稳留在字符串里,而且末尾完全没有换行符。
内容的提问来源于stack exchange,提问作者Palimondo
相关产品推荐
相关产品推荐

