符合协议——一次又一次地添加协议存根并不能修复错误
Conforming to protocol - adding protocol stubs again and again doesn't fix the error
所以我有 class FBViewController,它应该显示一个按钮让我登录和注销(只是为了测试 FB 登录)。我将其集成到新创建的项目中并且一切正常。然后我将其重新设计到我的应用程序中,但它无法正常工作。不确定它是否与 swift 版本或其他......
使用 Xcode 10.0
import UIKit
import FBSDKLoginKit
class FBViewController: UIViewController, FBSDKLoginButtonDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let btnFBLogin = FBSDKLoginButton()
btnFBLogin.readPermissions = ["public_profile", "email"]
btnFBLogin.delegate = self
btnFBLogin.center = self.view.center
self.view.addSubview(btnFBLogin)
if FBSDKAccessToken.current() != nil{
print("Logged IN ALREADY")
printInfo()
}else{
print("not logged in")
}
}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error != nil{
print(" error")
// print(error.localizedDescription)
}else if result.isCancelled {
print("User cancelled.")
}
else {
print("Logge IN!")
printInfo()
}
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
print("logged out")
}
func printInfo(){
if(FBSDKAccessToken.current() != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id,name , first_name, last_name , email"]).start(completionHandler: { (connection, result, error) in
guard let Info = result as? [String: Any] else { return }
if let userName = Info["name"] as? String
{
print(userName)
}
})
}
}
}
FBSDKLoginButtonDelegate
/**
@protocol
A delegate for `FBSDKLoginButton`
*/
@protocol FBSDKLoginButtonDelegate <NSObject>
@required
/**
Sent to the delegate when the button was used to login.
@param loginButton the sender
@param result The results of the login
@param error The error (if any) from the login
*/
- (void)loginButton:(FBSDKLoginButton *)loginButton
didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result
error:(NSError *)error;
/**
Sent to the delegate when the button was used to logout.
@param loginButton The button that was clicked.
*/
- (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton;
@optional
/**
Sent to the delegate when the button is about to login.
@param loginButton the sender
@return YES if the login should be allowed to proceed, NO otherwise
*/
- (BOOL) loginButtonWillLogin:(FBSDKLoginButton *)loginButton;
@end
添加协议存根仅添加了 1 个函数 (loginButton...),该函数已实现但似乎无法识别。
我尝试清理项目、删除派生数据、重新启动,但它仍然给我同样的错误:
Type 'FBViewController' does not conform to protocol
'FBSDKLoginButtonDelegate'
帮助感谢!
谢谢
按照以下步骤尝试卸载并重新安装 pods:
从您的 .podfile 中删除所有依赖项(或者通过在行首添加 #
来注释)
运行 pod install
在您的项目目录中并等待卸载所有 pods 已删除
重新添加 pods 依赖项并再次 运行 pod install
清理你的项目并再次构建
另外:有时我会遇到类似的问题,只需删除已经实现的所需功能即可解决,并尝试使用 Xcode 的自动完成功能重新添加。
例如,开始输入方法,在自动完成列表中选择右侧(如果没有出现使用^+Space
),然后按回车键:
sample
所以经过大量搜索后,我找到了这个问题的答案
我导入了 Turbolinks-ios,它有自己的错误结构,我不得不在方法存根中使用 Swift.Error -
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Swift.Error!) {...
对于可能来这里遇到来自 Cocoapod 的 class Delegate 问题的其他人。
所以我遇到的问题是添加协议
func photo(captured: UIImage?, currentStep: StepEnum) {
但他们总是要求重复,因为 cocoapod 项目和我的项目有相同的 class 名称 "StepEnum" 来修复我只需要更改我的 class 名称和它已解决。
所以我有 class FBViewController,它应该显示一个按钮让我登录和注销(只是为了测试 FB 登录)。我将其集成到新创建的项目中并且一切正常。然后我将其重新设计到我的应用程序中,但它无法正常工作。不确定它是否与 swift 版本或其他...... 使用 Xcode 10.0
import UIKit
import FBSDKLoginKit
class FBViewController: UIViewController, FBSDKLoginButtonDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let btnFBLogin = FBSDKLoginButton()
btnFBLogin.readPermissions = ["public_profile", "email"]
btnFBLogin.delegate = self
btnFBLogin.center = self.view.center
self.view.addSubview(btnFBLogin)
if FBSDKAccessToken.current() != nil{
print("Logged IN ALREADY")
printInfo()
}else{
print("not logged in")
}
}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error != nil{
print(" error")
// print(error.localizedDescription)
}else if result.isCancelled {
print("User cancelled.")
}
else {
print("Logge IN!")
printInfo()
}
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
print("logged out")
}
func printInfo(){
if(FBSDKAccessToken.current() != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id,name , first_name, last_name , email"]).start(completionHandler: { (connection, result, error) in
guard let Info = result as? [String: Any] else { return }
if let userName = Info["name"] as? String
{
print(userName)
}
})
}
}
}
FBSDKLoginButtonDelegate
/**
@protocol
A delegate for `FBSDKLoginButton`
*/
@protocol FBSDKLoginButtonDelegate <NSObject>
@required
/**
Sent to the delegate when the button was used to login.
@param loginButton the sender
@param result The results of the login
@param error The error (if any) from the login
*/
- (void)loginButton:(FBSDKLoginButton *)loginButton
didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result
error:(NSError *)error;
/**
Sent to the delegate when the button was used to logout.
@param loginButton The button that was clicked.
*/
- (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton;
@optional
/**
Sent to the delegate when the button is about to login.
@param loginButton the sender
@return YES if the login should be allowed to proceed, NO otherwise
*/
- (BOOL) loginButtonWillLogin:(FBSDKLoginButton *)loginButton;
@end
添加协议存根仅添加了 1 个函数 (loginButton...),该函数已实现但似乎无法识别。
我尝试清理项目、删除派生数据、重新启动,但它仍然给我同样的错误:
Type 'FBViewController' does not conform to protocol 'FBSDKLoginButtonDelegate'
帮助感谢! 谢谢
按照以下步骤尝试卸载并重新安装 pods:
从您的 .podfile 中删除所有依赖项(或者通过在行首添加 #
来注释)
运行 pod install
在您的项目目录中并等待卸载所有 pods 已删除
重新添加 pods 依赖项并再次 运行 pod install
清理你的项目并再次构建
另外:有时我会遇到类似的问题,只需删除已经实现的所需功能即可解决,并尝试使用 Xcode 的自动完成功能重新添加。
例如,开始输入方法,在自动完成列表中选择右侧(如果没有出现使用^+Space
),然后按回车键:
sample
所以经过大量搜索后,我找到了这个问题的答案
我导入了 Turbolinks-ios,它有自己的错误结构,我不得不在方法存根中使用 Swift.Error -
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Swift.Error!) {...
对于可能来这里遇到来自 Cocoapod 的 class Delegate 问题的其他人。
所以我遇到的问题是添加协议
func photo(captured: UIImage?, currentStep: StepEnum) {
但他们总是要求重复,因为 cocoapod 项目和我的项目有相同的 class 名称 "StepEnum" 来修复我只需要更改我的 class 名称和它已解决。