“为什么?”\";在swift字符串中,在稍有不同的情况下行为会有所不同吗?

“为什么?”\";在swift字符串中,在稍有不同的情况下行为会有所不同吗?,swift,string,Swift,String,我有一个自定义的键盘扩展,可以将数据从可编程设备输入文本字段 func getdata(data:Data){ ... processing data from BLE device ... dataToSend = "...\n" textDocumentProxy.insertText(dataToSend) } 当此函数用于在不同的应用程序中插入文本时,其行为会有所不同。例如,在notes中,换行符(“\n”)似乎工作正常并插入新行。但是,当数据插入电子邮件或数字表时,它无法正常工作,它

我有一个自定义的键盘扩展,可以将数据从可编程设备输入文本字段

func getdata(data:Data){
...
processing data from BLE device
...
dataToSend = "...\n"
textDocumentProxy.insertText(dataToSend)
}
当此函数用于在不同的应用程序中插入文本时,其行为会有所不同。例如,在notes中,换行符(“\n”)似乎工作正常并插入新行。但是,当数据插入电子邮件或数字表时,它无法正常工作,它会插入一个制表符(“\t”),而不是插入新行

我还有一个插入新行字符的函数

func newLine(){
textDocumentProxy.insertText("\n")
}
无论我使用的是什么应用程序,它都能正常工作。有人知道为什么“\n”本身可以正常工作,但字符串末尾的行为不同吗


为了完整起见,我尝试在getdata()末尾调用换行符(),认为在字符串末尾插入“\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
    }
}
然后将您测试和使用过的产品存放在任何地方,并在任何地方使用。
请注意,您不能依赖字符集的索引。它可能会改变。

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

使用此扩展:

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
    }
}
然后将您测试和使用过的产品存放在任何地方,并在任何地方使用。
请注意,您不能依赖字符集的索引。它可能会改变。

实际上,您可以在换行符中查找字符。定义中换行符上方的注释是:返回包含换行符(
U+000A~U+000D
U+0085
U+2028
,以及
U+2029
)的字符集。太好了!使用其中一个,这些不同的字符并不能解决我的问题。我的问题不是不能输入新行,而是新行字符的行为因输入位置而异:即按下按钮或在字符串末尾输入。当然,其中一些可能有委托方法来处理返回,您无法更改它们。但是你可以返回一些不同于返回的东西来绕开它,实际上你可以在换行符中查找字符。定义中换行符上方的注释是:返回包含换行符(
U+000A~U+000D
U+0085
U+2028
,以及
U+2029
)的字符集。太好了!使用其中一个,这些不同的字符并不能解决我的问题。我的问题不是不能输入新行,而是新行字符的行为因输入位置而异:即按下按钮或在字符串末尾输入。当然,其中一些可能有委托方法来处理返回,您无法更改它们。但是你可以返回一些不同于返回的东西来绕过它。