swift - 为什么 swift 字符串中的 "\n"在稍微不同的情况下表现不同?

标签 swift string

我有一个自定义键盘扩展,可以将数据从 BLE 设备输入到文本字段中。

func getdata(data:Data){
...
processing data from BLE device
...
dataToSend = "...\n"
textDocumentProxy.insertText(dataToSend)
}

当此函数用于在不同的应用程序中插入文本时,它的行为会有所不同。例如,在注释中,换行符 ("\n") 似乎可以正常工作并插入一个新行。但是当数据被插入到电子邮件或数字表中时,它无法正常工作,它没有插入新行,而是插入了一个制表符(“\t”)。

我还有一个插入换行符的功能

func newLine(){
textDocumentProxy.insertText("\n")
}

无论我使用什么应用程序,它都能按预期工作。有谁知道为什么“\n”本身可以正常工作,但在字符串末尾时却有不同的行为?

为了完整起见,我尝试在 getdata() 的末尾调用 newLine(),认为在字符串末尾插入“\n”可能会出现问题,但结果是一样的。

最佳答案

还有另一个可用的换行符,但我不能简单地将它们粘贴到这里(因为它们会换行)。

使用这个扩展:

extension CharacterSet {
    var allCharacters: [Character] {
        var result: [Character] = []
        for plane: UInt8 in 0...16 where self.hasMember(inPlane: plane) {
            for unicode in UInt32(plane) << 16 ..< UInt32(plane + 1) << 16 {
                if let uniChar = UnicodeScalar(unicode), self.contains(uniChar) {
                    result.append(Character(uniChar))
                }
            }
        }
        return result
    }
}

您可以访问任何 CharacterSet 中的所有字符。有一个名为 newlines 的字符集。使用其中之一来满足您的要求:

let newlines = CharacterSet.newlines.allCharacters
for newLine in newlines {
    textDocumentProxy.insertText(String(newLine))
}

然后将您测试和工作的那个存储在任何地方并在任何地方使用它。 请注意,您不能依赖字符集的索引。它可能会改变。

关于swift - 为什么 swift 字符串中的 "\n"在稍微不同的情况下表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58401363/

相关文章:

导航堆栈中的 ios 两个转换/演示

ios - 使用外部类更改 tableView touch 上的 View Controller

ios - 在 Swift 中将闭包传递给 addTarget

c# - 如何将所有转换为一个字符串?

linux - 搜索和存储文件的特定部分

swift - 根据星期几显示文本

ios - WatchOS 应用程序未检测到配套的 iOS 应用程序

perl - 如何计算 Perl 中重叠的子字符串?

c++ - 从字符串中删除所有空格

c - 在 C 中使用定界符拆分字符串 - 计数错误,拆分不正确