gpt4 book ai didi

Swift Strings 似乎错误地处理了回车符和换行符

转载 作者:搜寻专家 更新时间:2023-11-01 06:14:46 25 4
gpt4 key购买 nike

就上下文而言,我正在开发的应用程序正在使用蓝牙 UART 连接,这就是我发现这个明显问题的方式。

当我的消息以“/r/n”结束时,Swift 在考虑字符串的长度时会忽略换行符。我实际上可以添加第二个换行符,但这会引入 UART 错误。

这里有一些代码概述了我的问题:

var str = "Hey Apple"
print(str.count) //9
str += "\r" //"Hey Apple\r"
print(str.count) //10
str += "\n" //"Hey Apple\r\n"
print(str.count) //10
str += "\n" //"Hey Apple\r\n\n"
print(str.count) //11


var str2 = "Uh, hello?"
print(str2.count) //10
str2 += "\n" //"Uh, hello?\n"
print(str2.count) //11
str2 += "\n" //"Uh, hello?\n\n"
print(str2.count) //12
str2 += "\r" //"Uh, hello?\n\n\r"
print(str2.count) //13

这里有点可疑,我不知道为什么。

想法?

最佳答案

"\r""\r\n" 都算作一个“扩展的 Unicode 字素”cluster”,这就是 str.count 的计数(比较 "Strings and Characters"在 swift 引用和 Strings in Swift 2在 Swift 博客中)。

如果将字符串转换为 UTF-8 数据以便通过蓝牙发送并确定数据的实际长度

let data = Data(str.utf8)
let count = data.count // == str.utf8.count

然后一切都按预期工作:

var str = "Hey Apple"
print(Data(str.utf8) as NSData) // <48657920 4170706c 65>
print(Data(str.utf8).count) // 9

str += "\r" //"Hey Apple\r"
print(Data(str.utf8) as NSData) // <48657920 4170706c 650d>
print(Data(str.utf8).count) // 10

str += "\n" //"Hey Apple\r\n"
print(Data(str.utf8) as NSData) // <48657920 4170706c 650d0a>
print(Data(str.utf8).count) // 11

str += "\n" //"Hey Apple\r\n\n"
print(Data(str.utf8) as NSData) // <48657920 4170706c 650d0a0a>
print(Data(str.utf8).count) // 12

关于Swift Strings 似乎错误地处理了回车符和换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47566558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com