Swift 在字符串中查找字符会导致错误的结果

Swift 在字符串中查找字符会导致错误的结果,swift,Swift,我有一个来自Bluetooth的传入字符串,它以块的形式出现,最后看起来像: sentData1; 我只想在找到;最后,因此: if let str = String(data: characteristic.value!, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) { //data comes in chunks if (

我有一个来自Bluetooth的传入字符串,它以块的形式出现,最后看起来像:

sentData1;
我只想在找到;最后,因此:

    if let str = String(data: characteristic.value!, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
    {

               //data comes in chunks
               if (str.range(of: ";") == nil){dataIn+=str; return} //stop if not ;
               print("BLE:DATAIN:",dataIn ) //final
               dataIn=""
}
它将始终打印:BLE:DATAIN:sent。 我检查了传入的数据是否如预期的那样,它不会停止半个字的唯一方法是,如果我将字符改为查找、改为@或其他字符,那么它将收集整个字,而不会在发送时停止

还尝试了NSNotfound。

尝试以下操作:

if let str = String(data: characteristic.value!, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
{

           //data comes in chunks
           if (str.range(of: ";") != nil){dataIn+=str; return} //stop if not ;
           print("BLE:DATAIN:",dataIn ) //final
           dataIn=""
}

在if条件下,您正在检查它是否包含;也可以不添加,但为此,您还需要添加该字符串,因为当该字符串包含;时,您将忽略该字符串;。因此,请这样尝试:

if let data = characteristic.value,
   let str = String(data: data, encoding: .utf8) {

      dataIn += str
      if (str.range(of: ";") == nil) {
          return
      }
      print("BLE:DATAIN:",dataIn ) //final
      dataIn=""
}

这段代码是否在某个循环中?谢谢,不,它在一个委托函数中,每次您获取输入蓝牙数据时都会调用该函数,并以字母块的形式获取这些数据。旁注:您可以用.utf8替换冗长的字符串。EncodingrawValue:String.Encoding.utf8.rawValue。不开玩笑吗?只是编码:.utf8.-编码需要String.encoding。您通过其原始值创建编码,该值与使用预定义的String.encoding.utf8值相同。编译器可以推断类型,这样您甚至可以省略字符串。Encoding@Curnelious为什么不会呢?如果我没有理解你,请原谅,但是如果你想要的是在字符串包含时执行if语句;你应该像我上面写的那样去做,而不是像你在尝试一样去做。@Curnelious好吧,现在我明白你的问题了。你还能试试我上面写的吗?@Curnelious你试过我的解决方案吗?因为当它包含;您没有将其添加到字符串中,这是您没有获得;试一下我的答案。@Curnelious欢迎你,伙计:,有时会发生:@Curnelious我想你现在明白了:@Curnelious在你的情况下是Data1;所以是数据,而您不仅忽略了数据;如果你想确认打印str,你会得到更好的主意。