使用在 Swift 2.1 中的 Objective C 中声明为块的闭包 Swift
Using closure Swift which is declared as block in Objective C in Swift 2.1
我在 Objective 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()
})
但我又完全犯了这个错误:
谁能给我个主意?
P/S:我读了这个问题:。并做同样的事情。但是不行
getUserCurrentProfile
是实例方法,您将其作为 class 方法调用。您应该在 FBManager
的实例上调用它(也许 sharedInstance
?):
FBManager.sharedInstance.getUserCurrentProfile { userInfo, error in)
appDelegate.showHomeView()
}
错误表明它无法将闭包转换为 FBManager
,并且是正确的,因为您将其作为 class 函数调用并且编译器期望和实例进行操作。上述调用也可以写在柯里化函数调用中:
FBManager.getUserCurrentProfile(FBManager.sharedInstance) { userInfo, error in)
appDelegate.showHomeView()
}
我在 Objective 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()
})
但我又完全犯了这个错误:
谁能给我个主意?
P/S:我读了这个问题:
getUserCurrentProfile
是实例方法,您将其作为 class 方法调用。您应该在 FBManager
的实例上调用它(也许 sharedInstance
?):
FBManager.sharedInstance.getUserCurrentProfile { userInfo, error in)
appDelegate.showHomeView()
}
错误表明它无法将闭包转换为 FBManager
,并且是正确的,因为您将其作为 class 函数调用并且编译器期望和实例进行操作。上述调用也可以写在柯里化函数调用中:
FBManager.getUserCurrentProfile(FBManager.sharedInstance) { userInfo, error in)
appDelegate.showHomeView()
}