为什么快速字符串中的“ \ n”在略有不同的情况下会有不同的表现?

时间:2019-10-15 19:20:36

标签: 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”可能会有问题,但结果是相同的。

1 个答案:

答案 0 :(得分:0)

还有其他newLine字符可用,但我不能只是将它们粘贴到这里(因为它们会换行)。

使用此扩展程序:

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))
}

然后将您测试过并工作过的产品存储到任何地方,并在任何地方使用。 请注意,您无法中继字符集的索引。可能会改变。