【发布时间】:2017-06-07 11:36:14
【问题描述】:
我正在尝试创建一个通用方法,我必须将 self(current UIViewController ) 作为参数传递。方法如下:
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 时,它说 无法将“UIViewController.Type”类型的值转换为预期的参数类型“UIViewController!”
对此我能做什么?
【问题讨论】:
-
试试 UIViewController.self
-
自己试试吧。
-
而不是 UIViewController?,传递 ViewController 对象,在您的情况下将是
self。最好创建当前 View Controller 的弱引用,然后传递它以避免强引用。weak var weakself = self fbLoginManager.logIn(withReadPermissions: ["email"], from:weakself) -
这个方法 IsFaceBookPermisssionGranted(_ completion:) 在哪里创建,它在单独的类中吗?还是在 UIViewController 子类中?
-
@NiravD 我在 viewController 中调用它。但我想在一个公共类中使用这个方法。通过在 ViewController 中启动该类,我想调用此方法。
标签: ios swift swift3 uiviewcontroller