我有一个自定义键盘扩展,可以将数据从 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/