在SwiftUI TextField中如何将转义序列\n处理为换行符?
问题原因
你在TextField中输入的\n本质是两个独立的普通字符:反斜杠\ + 字母n,和硬编码时编译器自动转义生成的换行符(ASCII码值为10)完全不是一回事。硬编码字符串时编译器会自动识别代码里的\n转义序列,替换为真正的换行符存入字符串;而用户输入的内容不会经过编译器转义处理,所以会原样保留\和n两个字符。你尝试访问wrappedValue没有效果是正常的,因为wrappedValue返回的就是输入的原始字符串,本身就没有存储真正的换行符。
解决方法
只需要在渲染Text前,手动把输入字符串里的\n字符序列替换为真正的换行符即可,修改后的代码如下:
struct Foo: View { @State private var inputText: String = "" // 处理转义序列的计算属性 private var renderedText: String { inputText.replacingOccurrences(of: "\\n", with: "\n") } var body: some View { VStack { TextField("foo", text: $inputText) Text(renderedText) } } }
可选扩展
如果后续需要支持更多转义序列(比如\t制表符、\\反斜杠本身),可以在renderedText计算属性里增加对应的替换规则即可。
内容的提问来源于stack exchange,提问作者sul
相关产品推荐
相关产品推荐

