2017-02-04 8 views
-1

間違った結果を与える検索のようになります。私は私が;を見つけた場合にのみ、それを印刷したい文字列内の文字は最後に、私はチャンクで来るの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を出力します。 到着データが期待どおりであることを確認しました、ハーフワードを停止しない唯一の方法は、私が探す文字を@または何かに変更した場合、それは単語全体を収集し、停止しませんsent

NSNotfoundでも試してみます。あなたはそれが;が含まれているか、いないことを確認しているif状態で

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

このコードはループ内にありますか? –

+0

ありがとうございました。デリゲート機能では、ブルートゥースデータを入力するたびに呼び出され、手紙でそれらを取得します。 – Curnelious

+0

サイドノート:長めの 'String.Encoding(rawValue:String.Encoding.utf8.rawValue)'を '.utf8'(冗談なし)に置き換えることができます – vadian

答えて

1

をしていますが、文字列を無視しているので、そのためにあなたは、また、その文字列を追加する必要があります。

+0

@Curnelious私の解決策を一度試してみましたか?それが ';'を含んでいるときに文字列に追加していないので、 ';'が返ってこない理由は一度私の答えと同じです。 –

+0

今しようと思っています:)まだ私について興味があります。 – Curnelious

+0

@キャスリアスウェルカイトメイト:)、それは時間がかかる:) –

1

これを試してみてください;が含まれている場合。したがって、この方法で試してください:

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どうしたのですか?私があなたを理解していない場合は私を許してください。しかし、あなたが望むのは、文字列に ";"が含まれているときにif文を実行することです。あなたは私が上に書いたようにそれをしなければならないし、あなたが試みているようではない。 – ctabuyo

+0

@Curneliousさて、あなたの質問が分かりました。あなたはまだ私が上に書いたことを試すことができますか? – ctabuyo

関連する問題