2017-06-07 3 views
1

Ich versuche, eine allgemeine Methode dafür zu erstellen, dass ich Selbst (aktueller UIViewController) als Parameter übergeben muss. Unten ist die Methode:Wie UIViewController als Parameter swift 3 übergeben?

func getFBUserData(){ 

     if let token = FBSDKAccessToken.current(){ 

     print("Access Token: \(token.tokenString!)") 

      FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in 
       if (error == nil){ 
        self.dict = result as! [String : AnyObject] 
        print(result!) 
        print(self.dict) 
        var jsonObj = JSON(result!) 
        if let first_name = jsonObj["first_name"].string { 
         NSLog("first_name : \(first_name)") 
        } 
        NSLog("RESULT JSON : \(JSON(result!))") 
        //print("Access Token: \(FBSDKAccessToken.current())") 
       } 
      }) 
     } 

    } 

ich diese wie folgt geändert:

func IsFaceBookPermisssionGranted(_ completion: @escaping (_ IsPermissionGranted: Bool, _ error_type:ErrorType)->()) { 

    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 

    fbLoginManager.logIn(withReadPermissions: ["email"], from: UIViewController?) { (result, error) in 
     if (error == nil){ 
      let fbloginresult : FBSDKLoginManagerLoginResult = result! 
      if fbloginresult.grantedPermissions != nil { 
       if(fbloginresult.grantedPermissions.contains("email")) 
       { 
        completion(true,nil) 
       } 
      }else{ 
       completion(false,.AUTH_FAILED) 
      } 
     }else{ 
      print("Error : \(error)") 
      completion(false,.AUTH_FAILED) 
     } 
    } 
} 

Aber wenn ich passieren UIViewController wie oben heißt es nicht Wert vom Typ ‚UIViewController.Type‘ zu erwarten Argument Typ konvertieren kann ' UIViewController! '

Was kann ich dabei tun?

+0

Versuchen UIViewController.self –

+0

einfach mit sich selbst versuchen. –

+1

Übergeben Sie anstelle von UIViewController das ViewController-Objekt, das in Ihrem Fall "self" ist. Es empfiehlt sich, eine schwache Referenz des aktuellen View Controllers zu erstellen und sie dann zu übergeben, um eine starke Referenz zu vermeiden. 'schwache var weakself = self fbLoginManager.logIn (withReadPermissions: [" email "], von: swanself)' – Raj

Antwort

0

In Swift 3.0, können Sie Ihren UIViewController nicht direkt übergeben. Zuerst können Sie ein View-Controller-Objekt erstellen.

Zum Beispiel

let storyBoard = UIStoryboard.init(name: "Main", bundle: nil) 
let yourVC = self.storyboard?.instantiateViewController(withIdentifier: "your_view_controller_Identifier") as! YourViewController 
+0

So schreiben wir hier keinen Code. –

Verwandte Themen