在objective c类中使用delegate来调用swift方法

时间:2017-05-20 10:20:43

标签: objective-c swift

我有两个文件

Question.m
Question.h

这两个是由Objective-C

编写的

MainView.swift

这是由Swift编写的

问题类有代表

@interface Question : NSObject{

    id delegate;// put MainViewController here

    - (void)trythisfunction{
         [delegate test] // compiler doesn't find this method.
    } 
}

我创建了类实例并将MainViewController作为MainViewController.swift中Question的委托

 class MainViewController: UIViewController {
        override func viewDidLoad(){
            q = Question()
            q.delegate = self // put self in delegate
         }
         func test(){
             NSLog("test is OK") 
         } 
 }

然而编译器发现错误[委托测试] Question.m:169:19:选择器'test:'

没有已知的实例方法

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要做一些更改。

下面的类声明不能编译,因为你不能在interface中声明变量。

    @interface Question : NSObject{

    id delegate;

    - (void)trythisfunction {
         [delegate test] 
    } 
    }

我已经修复了上面的课,现在看起来像这样,

 # Question.h file
 #import <Foundation/Foundation.h>

 @interface Question : NSObject
 @property (nonatomic, strong) id delegate;
 @end

以下是类

的实现
 # Question.m file
 #import "Question.h"

 @implementation Question

 @synthesize delegate;

 - (void)trythisfunction{
     [delegate test];
 }
 @end

由于我们正在整合此swift,因此我们需要一个内容类似的Bridging Header

  #import "Test.h"

最后在你的swift课程中,你可以导入这个课程

import UIKit

class MainViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let q = Test()
        q.delegate = self
    }
    func test(){
        NSLog("test is OK")
    }
}

上面的代码就像魅力一样。