我有一个自定义的键盘扩展,可以将数据从一个BLE设备输入到一个文本字段中。
func getdata(data:Data){
...
processing data from BLE device
...
dataToSend = "...\n"
textDocumentProxy.insertText(dataToSend)
}
当此函数用于在不同的应用程序中插入文本时,其行为会有所不同。例如,在notes中,换行符(“\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 - 为什么快速字符串中的“\n”在稍微不同的情况下表现不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58401363/