如何使用swift 4在目标c类中符合swift类委托?

Shu*_*Ain 4 delegates objective-c ios swift4 ios11

假设有两个类,一个在 swift 中,另一个在同一个项目中的objective-c 类中。

在 swift 类中,我声明了委托,我想在目标 c 类中设置该委托。

我已经这样做了以下方式...

import UIKit

@objc public protocol SwiftLoginVCDelegate: class {

}

@objc public class SwiftLoginViewController: UIViewController {

    @IBOutlet var txtUserName: UITextField!
    @IBOutlet var txtPassword: UITextField!
    @IBOutlet var btnLogin: UIButton!
    var delegate: SwiftLoginVCDelegate?

    override public func viewDidLoad() {
        super.viewDidLoad()
        self.txtPassword.text = "XYZ"
        self.txtPassword.text = "123"
        self.btnLogin.backgroundColor = UIColor.blue

    }
 @objc public func testObjective(){
        print("Swift class is integrated in objective c project")
    }
Run Code Online (Sandbox Code Playgroud)

目标 c 类是

#import "Mediator.h"

@class    SwiftLoginViewController;
@protocol SwiftLoginVCDelegate;

@interface LoginMediator : Mediator

@end
Run Code Online (Sandbox Code Playgroud)

实现类是

#import "xyz-Swift.h"

@class SwiftLoginViewController;

@implementation LoginMediator 


-(void)onRegister
{
// line 1:   [(XYZController*)self.viewComponent setDelegate:self];

   line 2 :  [(SwiftLoginViewController*)self.viewComponent setDelegate:self];

       [objectVC testObjective];
}
Run Code Online (Sandbox Code Playgroud)

如果您检查 onRegister 方法,则使用目标 c 设置第 1 行委托,现在已对其进行注释,但我想在 swift 4 第 2 行中设置相同的委托,当我尝试在 swift 4 中设置委托时,我得到了跟随错误

“SwiftLoginViewController”没有可见的@interface 声明了选择器“setdelegate”;

笔记 :

另一个我能够访问 swift 类中定义的所有 var 和函数到目标 c 类。我无法在 swift 类中声明的目标 c 类中设置委托。

任何人都知道我在上面的代码中做错了什么吗?感谢所有输入。

Gle*_*enn 5

好的,所以我在 Objective-C 中创建了一个示例项目,然后安装了我的 Swift 框架,名为GPKit,一旦我让它工作,我意识到你没有使用Cocoapod. 所以我制作了一个示例 Swift 类,然后在我的 Objective-C 类中使用它。

首先,您需要学习如何在 Objective-C 类中正确使用 Swift 文件/类,从这里学习:不能在 Objective-C 中使用 Swift 类

然后一旦你让它工作,确认一个 Swift 委托并在该委托中实现功能将很容易。

我在你的实现中看到的是你正在制作一个新的classprotocol.

@class    SwiftLoginViewController;
@protocol SwiftLoginVCDelegate;
Run Code Online (Sandbox Code Playgroud)

这是我为这个问题制作的示例代码:

视图控制器.m

#import "TestObjcUsingGPKit-Swift.h"
#import "ViewController.h"

@interface ViewController () <CuteDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    CuteClass *newCutie = [[CuteClass alloc] init];
    newCutie.delegate = self;
}

- (void)myCuteFunc {
    // --- the delegate function
}

@end
Run Code Online (Sandbox Code Playgroud)

可爱类.swift

import UIKit

@objc public protocol CuteDelegate: NSObjectProtocol {
    @objc func myCuteFunc()
}

public class CuteClass: NSObject {
    weak var delegate: CuteDelegate?
}
Run Code Online (Sandbox Code Playgroud)

GitHub 上为您提供的完整示例项目:https : //github.com/glennposadas/UsingSwift-In-ObjectiveC