2017-11-21 3 views

Antwort

1

Wenn result soll ein Wörterbuch sein, müssen Sie optional gesenkten zu und Any? in den erwarteten Typ auszupacken:

if let item = result as? [String:Any], 
    let email = item["email"] as? String { 
     print(email) 
} 
+0

Ihre Annahme richtig :) ist –

+0

es ist nicht Fehler aber ich kann keine E-Mail bekommen – Meas

+0

Dann stimmt die Struktur des Ergebnisses nicht überein. Post 'Ergebnis' wenn Sie können – vadian

0

Der completionHandler Verschluss für die start Methode enthält drei Parameter, wie folgt implementiert (Ziel C):

typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection, 
             id result, 
             NSError *error); 

Source code reference.

So ist der id Datentyp wäre transformedAny (Optional) Typ zu sein, das für die Swift Schließung bedeutet, würden die Parameter sein:

(FBSDKGraphRequestConnection?, Any?, Error?) 

Wie in der Dokumentation erwähnt:

  • Parameter Ergebnis: Das Ergebnis der Anfrage. Dies ist eine Übersetzung von JSON-Daten in Objekte NSDictionary und NSArray. Dies ist Null, wenn ein Fehler aufgetreten ist.

So müssen Sie es als Swift Wörterbuch als [String : AnyObject] werfen und dann „E-Mail“ String von ihm erhalten:

if let unwrappedResult = result as? [String : Any], let email = unwrappedResult["email"] as? String { 
    print(email) 
} 
+0

kann ich nicht bekommen E-Mail von Facebook-Benutzer – Meas

+0

@Meas sind Sie sicher, dass der Benutzer * ermöglicht * seine/ihre E-Mail-Adresse zu zeigen? Dies hängt von der Einrichtung der Privatsphäre des Benutzers ab. Wenn der "Fehler" "Null" ist, sollten Sie die gewünschten Daten wie die E-Mail erhalten. –

Verwandte Themen