2017-02-04 2 views
-1

Ich habe eine eingehende Zeichenfolge von Bluetooth, die in Blöcken kommt, am Ende wie folgt aussehen:finden Zeichen in einer Zeichenfolge falsche Ergebnisse liefert

sentData1; 

Ich möchte nur, es drucken, wenn ich die ; an die finden Ende, so:

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="" 
} 

Es wird immer gedruckt: BLE:DATAIN: sent. Ich habe überprüft, dass die eingehenden Daten ist wie erwartet, der einzige Weg, es wird nicht halbieren Wort ist, wenn ich das Zeichen zu ändern, nach @ oder etwas anderes suchen, dann wird es das ganze Wort sammeln und nicht zu stoppen unter sent.

Versucht auch mit NSNotfound.

+0

Sind dieser Code innerhalb irgendeiner Schleife? –

+0

Danke, nein, es ist in einer Delegate-Funktion, die jedes Mal aufgerufen wird, wenn Sie Bluetooth-Daten eingeben, und Sie erhalten sie in Brocken von Buchstaben. – Curnelious

+0

Side-note: Sie können langatmig 'String.Encoding (rawValue: String.Encoding.utf8.rawValue)' mit '.utf8' ersetzen (kein Scherz) – vadian

Antwort

1

Im if Bedingung Sie überprüfen, dass es enthält ; oder nicht, aber dafür müssen Sie auch die Zeichenfolge hinzuzufügen, da Sie die Zeichenfolge ignorieren wenn es die ; enthält. So versuchen Sie es auf diese Weise:

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="" 
} 
+0

@Curnelious Haben Sie meine Lösung einmal versucht? Weil, wenn es '' 'enthält, du es nicht zu Zeichenkette hinzufügst, die der Grund ist, warum du das' '' nicht bekommst, versuche wie meine Antwort einmal. –

+0

versuchen gerade jetzt :) immer noch neugierig auf meine. – Curnelious

+0

@Curnelious Willkommen Kumpel :), Es passiert einige Zeit :) –

1

Versuchen Sie folgendes:

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="" 

}

+0

@Curnelious Wie kommt es nicht? Entschuldigen Sie, wenn ich Sie nicht verstanden habe, aber wenn Sie die if-Anweisung ausführen möchten, wenn die Zeichenfolge ";" Du solltest es so machen, wie ich oben geschrieben habe und nicht wie du es versuchst. – ctabuyo

+0

@Curnelious Ok, jetzt verstehe ich deine Frage. Kannst du noch versuchen, was ich oben geschrieben habe? – ctabuyo

Verwandte Themen