我在目标C文件中有一个块声明,如下所示:

- (void) getUserCurrentProfile:(void (^)(UserInfo *userInfo,NSError * error)) callBack {
if ([FBSDKAccessToken currentAccessToken]) {
    //code here
   }];
}

在Swift文件中,我称之为:
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
FBManager.getUserCurrentProfile({(userInfo:UserInfo?, error:NSError?) -> Void in
  appDelegate.showHomeView()
})

但我又完全明白了这个错误:
objective-c - 使用闭包Swift,它在Swift 2.1中的Objective C中声明为块-LMLPHP
有人能给我个主意吗?
P/S:我读到这个问题:Swift : Use closure compatible with Objective-C block。做同样的事情。但是它不起作用

最佳答案

getUserCurrentProfile是一个实例方法,您将其作为类方法调用。您应该在FBManagersharedInstance可能?)的实例上调用它。:

FBManager.sharedInstance.getUserCurrentProfile { userInfo, error in)
    appDelegate.showHomeView()
}

该错误表示它无法将闭包转换为FBManager,并且是正确的,因为您将其作为类函数调用,而编译器期望和实例对其进行操作。上述调用也可以写入curried函数调用中:
FBManager.getUserCurrentProfile(FBManager.sharedInstance) { userInfo, error in)
    appDelegate.showHomeView()
}

08-26 04:26