2017-06-07 15 views
1

私はパラメータとして現在のUIViewControllerを渡す必要があるという共通のメソッドを作成しようとしています。下記の方法であって、次のようにUIViewControllerをパラメータとして渡す方法swift 3?

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())") 
       } 
      }) 
     } 

    } 

私はこれを修正:

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) 
     } 
    } 
} 

しかし、それは が期待される引数の型 'にタイプ「UIViewController.Type」の値を変換できませんと言う上記のように私はのUIViewController渡しますUIViewController! '

私はこれで何ができますか?

+0

はUIViewController.self –

+0

は、単に自己としてみてください試してみてください。 –

+1

UIViewController?の代わりに、ViewControllerオブジェクトを渡します。あなたの場合は 'self'になります。現在のView Controllerの弱い参照を作成し、それを渡して強い参照を避ける方が良いです。 'weak var weakself = self fbLoginManager.logIn(withReadPermissions:[" email "]、from:weakself)' – Raj

答えて

0

swift 3.0では、 あなたはUIViewControllerを直接渡すことはできません。 まず、View Controllerオブジェクトを作成できます。例えば

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

これは、ここにコードを投稿する方法ではありません。 –

関連する問題