代表Objective-C和Swift之间的问题

时间:2018-05-19 22:38:54

标签: c++ objective-c swift objective-c++

我即将进入Swift的基础知识,Objective-C& C ++。我试图在Objective-C& C之间架起一座桥梁。斯威夫特&设置合适的委托(MyDelegate)。

下面的代码工作得很好但是我从静态函数调用Swift函数callbackInteger()时遇到了一些问题:

MyFile.mm:

static void test() {
    // how to call callbackInteger?
}

MyFile.mm:

- (void)callbackToSwift:(int)testInteger {
    if (self.delegate != nil) {
        [self.delegate callbackInteger: testInteger];
    }
}

MyDelegate.h:

@protocol MyDelegate <NSObject>
- (void) callbackInteger: (int) testInteger;
@end

ViewController.swift:

class ViewController: UIViewController, MyDelegate {
    func callbackInteger(_ testInteger: Int) {
       print("testInteger: \(testInteger)");
    }
}

注意:我真的不知道如何使用委托调用来实现对callbackInteger函数的调用。

1 个答案:

答案 0 :(得分:0)

协议不过是一个类必须实现的一组需求(方法)。我们说一个类符合协议。

因此,在您的静态函数test()中,如果您没有实例/对象(此处为ViewController),则无法调用协议的方法。一种工作方式(但不一定是一个漂亮的方式)将存储在某个地方(例如作为全局变量)ViewController的一个实例,以便在函数中重用它。

这样的事情:

// Top of your file
#import <Foundation/Foundation.h>
// other headers...

id<MyDelegate> globalDelegate;

static void test() {
    [globalDelegate callbackInteger:42];
}

// rest of your file

有很多关于协议和委托模式的资源,如this guide from Apple。仔细阅读他们如何在Cocoa&amp; Cocoa Touch。