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 类中设置委托。
任何人都知道我在上面的代码中做错了什么吗?感谢所有输入。
好的,所以我在 Objective-C 中创建了一个示例项目,然后安装了我的 Swift 框架,名为GPKit,一旦我让它工作,我意识到你没有使用Cocoapod. 所以我制作了一个示例 Swift 类,然后在我的 Objective-C 类中使用它。
首先,您需要学习如何在 Objective-C 类中正确使用 Swift 文件/类,从这里学习:不能在 Objective-C 中使用 Swift 类
然后一旦你让它工作,确认一个 Swift 委托并在该委托中实现功能将很容易。
我在你的实现中看到的是你正在制作一个新的class和protocol.
@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