gpt4 book ai didi

ios - 如何使用 swift 4 在 objective-c 类中符合 swift 类委托(delegate)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:45 25 4
gpt4 key购买 nike

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

在 swift 类中,我声明了委托(delegate),我想在 objective c 类中设置该委托(delegate)。

我按照下面的方式做了...

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")
}

objective-c 类是

#import "Mediator.h"

@class SwiftLoginViewController;
@protocol SwiftLoginVCDelegate;

@interface LoginMediator : Mediator

@end

实现类是

#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];
}

如果您检查 onRegister 方法,第 1 行中的委托(delegate)是使用 objective-c 设置的,现在已对此进行了评论,但我想在 swift 4 中设置相同的委托(delegate),第 2 行,当我尝试在 swift 4 中设置委托(delegate)时我收到以下错误

No visible @interface for 'SwiftLoginViewController' declares the selector 'setdelegate';

注意:

One more that i am able to access all the var and function defined in swift class to objective c Class. I am not able to set the Delegate in objective c Class which is declared in swift Class.

谁能知道我在上面的代码中做错了什么?感谢所有意见。

最佳答案

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

首先,您需要学习如何在您的 Objective-C 类中正确使用 Swift 文件/类,从这里学习:Can't use Swift classes inside Objective-C

然后,一旦它开始工作,向 Swift 委托(delegate)确认并在该委托(delegate)中实现功能将很容易。

我在您的实现中看到的是您正在制作一个新的协议(protocol)

@class    SwiftLoginViewController;
@protocol SwiftLoginVCDelegate;

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

ViewController.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

CuteClass.swift

import UIKit

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

public class CuteClass: NSObject {
weak var delegate: CuteDelegate?
}

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

关于ios - 如何使用 swift 4 在 objective-c 类中符合 swift 类委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46599738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com