2016-07-06 11 views
1

Ich versuche, eine App zu machen, die die Nähe von Beacons zeigt. Ich habe eine label, um diese Daten zu erhalten, aber ich kann nicht, und ich möchte nur "Nähe" nicht alle diese Daten, die in der Konsole zeigt. Ich versuche mit beacons[3], aber das Programm gibt mir einen Fehler.Console Print to Label mit 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)" 

    }} 

Console Daten:

[CLBeacon (UUID: < __NSConcreteUUID 0x12ee586c0> FDA50693-A4E2-4FB1-AFCF-C6EB07647828, major: 10004, minor: 54480, Proximity: 1 +/- 0.05 m, rssi: -32)]

Danke Jungs !!

+0

Der Fehler, den Sie von Aufruf erhalten Baken [3], da weniger passiert werden kann, als vier Beacons sind sichtbar. Ich würde eine Lösung wie @ eric-d in seiner Antwort verwenden, wo Sie auf 'beacons.first' zugreifen, um die erste zu erhalten, und dann auf sein Näherungsfeld zugreifen. – davidgyoung

Antwort

2

Wir sehen in locationManager ‚Unterschrift, dass beacons ist ein Array von CLBeacon Objekte:

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

Und wir sehen, dass Sie ein Objekt im Array erhalten:

[CLBeacon (UUID: < __NSConcreteUUID 0x12ee586c0> FDA50693-A4E2-4FB1-AFCF-C6EB07647828, major: 10004, minor: 54480, Proximity: 1 +/- 0,05 M, RSSI: -32)]

Also, dieses erste Objekt aus dem Array erhalten, erhält dann den Wert aus der Eigenschaft:

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

Natürlich, wenn Sie mehrere Baken in dem Array haben, können Sie eine Schleife verwenden:

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

CLBeacon ist eine Unterklasse von NSObject, also hat eine Methode namens description(), die eine NSString zurückgibt, die die Beschreibung des Objekts enthält.

Wenn Sie print(beacons) nennen, die Sie anrufen print auf einem Argument vom Typ [CLBeacon] (auch bekannt als Array<CLBeacon > oder ein Array von CLBeacon Objekte.). print kann nicht selbst CLBeacon Objekte drucken, so fragt es die CLBeacon für seine description(), und druckt das.

Der Ausgang:

[CLBeacon (UUID: < __NSConcreteUUID 0x12ee586c0> FDA50693-A4E2-4FB1-AFCF-C6EB07647828, major: 10004, minor: 54480, Proximity: 1 +/- 0,05 M, RSSI : -32)]

eine Anordnung eines einzelnen CLBeacon object, whose description` repräsentiert ist:

CLBeacon (UUID: < __NSConcreteUUID 0x12ee586c0> FD A50693-A4E2-4FB1-AFCF-C6EB07647828, Dur: 10004, Moll: 54480, Nähe: 1 +/- 0.05m, rssi: -32)

nur die Nähe zu bekommen, können wir die class documentation for CLBeacon schauen, und sehen, dass es eine proximity Variable wir bekommen können.

Wir alle Nähe wie mit etwas drucken:

für Leuchtfeuer in Baken { print (beacon.proximity) }