2016-07-06 7 views
1

私はビーコンの近接性を示すアプリを作ろうとします。私はlabelをこのデータを受け取るようにしましたが、私はできません。コンソールに表示されているすべてのデータではなく、近接性を表示したいだけです。 beacons[3]で試してみますが、プログラムでエラーが出ます。Swift 2でラベルを貼るコンソール印刷

import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

    @IBOutlet var metrosBeacon: UILabel! 
    let locationManager = CLLocationManager() 
    let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "FDA50693-A4E2-4FB1-AFCF-C6EB07647828")!, identifier: "MKT BEACONS") 
    // Note: make sure you replace the keys here with your own beacons' Minor Values 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     locationManager.delegate = self 
     if (CLLocationManager.authorizationStatus() != CLAuthorizationStatus.AuthorizedWhenInUse) { 
      locationManager.requestWhenInUseAuthorization() 
     } 
     locationManager.startRangingBeaconsInRegion(region) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion){ 
     print (beacons) 
     metrosBeacon.text = "/(beacons)" 

    }} 

コンソールデータ:

[CLBeacon(UUID:< __NSConcreteUUID 0x12ee586c0> FDA50693-A4E2-4FB1-AFCF-C6EB07647828、主要:10004、マイナー:54480、近接:1 +/- 0.05m、rssi:-32)]

ありがとうございました!

我々は beaconsがCLBeaconオブジェクトの配列であることを locationManagerの署名で見る
+0

エラーがビーコン[3]よりも少ないので、起きていること4つのビーコンが見える。 @ eric-dのような解決策を使用して答えを示します。最初のものを取得するために 'beacons.first'にアクセスし、その近接フィールドにアクセスします。 – davidgyoung

答えて

2

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) 

そして、我々はあなたが配列内のオブジェクトを取得することを参照してください。

[CLBeacon(UUID: < __NSConcreteUUID 0x12ee586c0> FDA50693-A4E2-4FB1-AFCF-C6EB07647828、主要:10004、マイナー:54480、近接:1つの+/- 0.05メートル、RSSI:-32)]

そのように

、配列からこの最初のオブジェクトを取得し、プロパティから値を取得する:もちろん

if let beacon = beacons.first { 
    print(beacon.proximity) 
} 

を、あなたは、アレイ内の複数のビーコンを持っている場合は、ループを使用することがあります。

for beacon in beacons { 
    print(beacon.proximity) 
} 
0

CLBeaconは​​のサブクラスであるため、description()というメソッドがあり、オブジェクトの説明を含むNSStringを返します。あなたがprint(beacons)を呼び出すと

、あなたは(別名:Array<CLBeacon >、またはCLBeaconオブジェクトの配列。)タイプ[CLBeacon]の引数にprintを呼んでいます。 printは、CLBeaconオブジェクトを印刷する方法を知っていないので、CLBeacondescription()と尋ねて、それを印刷します。

出力:

[CLBeacon(UUID:< __NSConcreteUUID 0x12ee586c0> FDA50693-A4E2-4FB1-AFCF-C6EB07647828、メジャー:10004、マイナー:54480、近接:1つの+/- 0.05メートル、RSSI :-32)]

単一CLBeacon object, whose description`の配列を表している。

CLBeacon(UUID:< __NSConcreteUUID 0x12ee586c0> FD A50693-A4E2-4FB1-AFCF-C6EB07647828、メジャー:10004、マイナー:54480、プロキシミティ:1 +/- 0。05メートル、RSSI:-32)

だけ接近を得るために、我々はclass documentation for CLBeaconに見て、そしてそれは我々が得ることができるproximity変数を持っていることがわかります。

私たちのようなもので、すべての近接を印刷することができ

:ビーコンにおけるビーコン用

{ プリント(beacon.proximity) }あなたが呼び出しから取得

関連する問題