我被这里发生的事情搞糊涂了.这应该很简单.我正在判断换行符的第一个索引,但它返回零.我在调试器中判断了该字符串,它的字符串末尾有\r\n.

rfidstring = {String} "900083000020758\r\n"

if rfidstring.firstIndex(of: "\n") != nil {
    print("rfid string has \\n")
}

我是不是犯了什么愚蠢的错误,却完全错过了?当我调用CONTAINS("\n")时,它可以正常工作并返回TRUE.所以当我呼叫contains()时,它知道字符串中有\n,但当我呼叫firstIndex(of:)时,它不会认为字符串中有一个?

// but ...
rfidstring.contains("\n") // returns true 

当我从RFID读取器读取时,我从输入流接收数据,读取器每行发送一个RFID.因此,为了确保我已经读取了整个RFID(有时它会以两个数据块的形式发送它),我需要读取到行尾.这就是为什么我要找新台词.

更新:这对我来说似乎很奇怪:

rfidstring.firstIndex(of: "\r\n") // returns valid index: 15[utf8]

rfidstring.firstIndex(of: "\r") // returns nil
rfidstring.firstIndex(of: "\n") // returns nil

推荐答案

请看这个问题:Difference between \n and \r?.

TL;DR:\r\n是Windows上的换行符,由于SWIFT字符串按人类感知的方式计算字符,而不是按单个字节计算,因此您需要搜索组合字符.或任何使用谓词的换行符:rfidstring.firstIndex(where: \.isNewline)

Swift相关问答推荐

如何使用Swift宏向 struct 体及其init函数添加新成员?

SwiftUI轨迹绘制怪异

从SwiftUI使用UIPageView时,同一页面连续显示两次的问题

与视图交互使工具栏&;标题消失

Swift UI中视图上的值未更新

为什么即使 `C` 是一个不是 `Sendable` 的类,Task` 也能工作?

如何延迟 swift 属性 didSet 使其每秒只触发一次

如何打印出此 struct 中的数据?

在主要参与者中启动分离任务和调用非隔离函数之间的区别

Swift Swiftui - 将 colored颜色 保存到 UserDefaults 并从 @AppStorage 使用它

有什么方法可以快速为泛型参数分配默认值?

如何以快速 Select 器菜单样式调整图像大小

.onTapGesture 不适用于 Stepper,仅适用于其文本

Apple 的自然语言 API 返回意外结果

在视图中设置所有变量

macOS 守护进程应该由Command Line ToolXcode 模板制作吗?

如何快速制作虚线?

如何在 Swift 中将对象归零

在情节提要中设置的 UITableViewCell 的恢复 ID 和标识符有什么区别

如何在 iOS 上的 Swift 中获取 sharedApplication?