2016-07-14 10 views
0

Ich versuche, den Wert aus einer erhalten [String: ANYOBJECT] und haben noch nicht die Antwort gefunden auf einer Web-ReferenziOS Swift Wert von [String: ANYOBJECT]

Einer der Parameter in einem Verfahren Aufruf:

advertisementData: [String : AnyObject]

Und wenn ich den Code ausführen, eine Debug-Zeile print("\(advertisementData)") zeigt eine ihrer Werte wie:

[ "kCBAdvDataIsConnectable": 1, „kCBAdvDataS erviceUUIDs ": < __NSArrayM 0x13cd812e0> ( C9CAB9B8-3ABF-4043-A5AF-9AD00C6074D5]

Auf jedem Pass Ich versuche, den Wert des Schlüssels zu identifizieren:
kCBAdvDataServiceUUIDs - es oft auf jede ändert passiere den Code

Ich suche, ob der Wert enthält: C9CAB9B8-3ABF-4043-A5AF-9AD00C6074D5 (wie dieses Beispiel) - oft es nicht.
Wenn ja, werde ich etwas tun. Wenn nicht, nichts tun.

Ich habe versucht:

let value = advertisementData["kCBAdvDataServiceUUIDs"] 

aber es hat nicht funktioniert und die Fehlermeldung war nicht klar (zumindest für diesen Neuling nicht klar war)

Wie kann ich diesen Wert erhalten in eine Variable, so dass ich es mit einem anderen String Wert vergleichen kann?

+0

Nun, was ist die Fehlermeldung Dieser Code funktioniert? – Alexander

Antwort

2

sollte

import CoreBluetooth 

func foo(advertisementData: [String : AnyObject]) { 

    if let 
     list = advertisementData["kCBAdvDataServiceUUIDs"] as? [AnyObject] 
     where (list.contains { ($0 as? CBUUID)?.UUIDString == "C9CAB9B8-3ABF-4043-A5AF-9AD00C6074D5" }) { 
     print("Found") 
    } 
} 
+0

Vielen Dank für Ihren Lösungsvorschlag 1 (die Lösung 2 wurde noch nicht hinzugefügt). Anstatt es zu einer Funktion zu machen, lege ich den Code if {} direkt in meinen Code. und dann einen Breakpoint auf den Ausdruck setzen ("OK"). Aber trotz meines Debug-print() - Codes, der das Vorhandensein der 'Trigger'-Zeichenfolge bei einer Anzahl von Durchläufen durch den Code anzeigt, bricht der Haltepunkt bei Drucken ("OK") niemals "ab". – Dhugalmac

+0

@Dhugalmac: Hast du versucht meinen zweiten Code zu schneiden? –

+0

Ich habe gerade Lösung 2 mit dem Breakpoint beim Drucken ausprobiert ("gefunden"). Leider ist es auch nie "Broke" und zeigt damit an, dass die Bedingungen nicht "gefunden" wurden. – Dhugalmac

1
let value = advertisementData["kCBAdvDataServiceUUIDs"] as! [String] 
let result = value.contains("C9CAB9B8-3ABF-4043-A5AF-9AD00C6074D5") 
print(result ? "Found" : "Not Found") 
+0

Sie sollten diese erzwungene Nötigung in eine 'wenn lassen 'oder' Wache' konvertieren – Alexander

+0

chensam - Ich habe Ihren Vorschlag ausprobiert und es wurde nicht ausgeführt. – Dhugalmac

Verwandte Themen