2017-03-17 7 views
0
func filteredBeacons(_ beacons: [CLBeacon]) -> [CLBeacon] { 
    var filteredBeacons = beacons // Copy 

    var lookup = Set<String>() 
    for index in 0..<beacons.count { 


     let currentBeacon = beacons[index] 
     let identifier = "\(currentBeacon.major)/\(currentBeacon.minor)" 

     if lookup.contains(identifier) { 
      filteredBeacons.remove(at: index) 
     } else { 
      lookup.insert(identifier) 
     } 

    } 

    return filteredBeacons 
} 

このコードでは、複製されたビーコンはすべて削除されます。私は今、このコードが近接 "不明"(すなわち非常に遠い)のビーコンも取り除きたいと思っています。誰かが私にこれをする方法を教えてもらえますか? CLクラスが必要なのは分かっています。「未知の」ビーコンを削除するスウィフト機能 - ibeacon

私はxcodeにはとても新しいので、可能であればもっと説明してください。ありがとうございました。

if currentBeacon.proximity == .unknown { 
    filteredBeacons.remove(at: index) 
} 

ところでCLProximityは、したがって、あなただけの代わりにCLProximity.unknown

答えて

1

てみの.unknownを書くことができます列挙です:近接unknownあなたは自分のループ内で次のコードを追加する必要があります任意のビーコンを削除するには

+0

ありがとうございました。これは、しかし、私はアプリでそれを実行すると、アプリケーションがクラッシュします。なぜ未知数を捨てるとクラッシュするのか分かりません。どのようにこれを修正するための任意のアイデア? (申し訳ありませんが、私はエラーメッセージを見つけることができませんでしたログを失った) –

+0

インデックスがfilteredBeaconsの配列の長さを超えている可能性がありますので、ループを1回通過する2つのビーコンを削除するとクラッシュする可能性があります – davidgyoung

+0

ありがとう - 私は2つのループを作成する必要がありますか?未知のビーコンを取り除くためのものと、重複したビーコンを取り除くもの。 –

1

func filteredBeacons(_ beacons: [CLBeacon]) -> [CLBeacon] { 
    var filteredBeacons = beacons // Copy 

    var lookup = Set<String>() 
    for index in 0..<beacons.count {  
     let currentBeacon = beacons[index] 
     if currentBeacon.proximity == .unknown { 
      filteredBeacons.remove(at: index) 
     } 
     else { 
      let identifier = "\(currentBeacon.major)/\(currentBeacon.minor)" 

      if lookup.contains(identifier) { 
       filteredBeacons.remove(at: index) 
      } else { 
       lookup.insert(identifier) 
      } 
     } 
    } 

    return filteredBeacons 
} 
関連する問題