我即将进入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函数的调用。
答案 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。