gpt4 book ai didi

c++ - Objective-C 和 Swift 之间的委托(delegate)问题

转载 作者:行者123 更新时间:2023-11-28 07:48:05 26 4
gpt4 key购买 nike

我即将学习 Swift、Objective-C 和 C++ 的基础知识。我正在尝试在 Objective-C 和 Swift 之间架起一座桥梁,并设置一个合适的委托(delegate) (MyDelegate)。

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

我的文件.mm:

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

我的文件.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)");
}
}

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

最佳答案

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

所以在你的静态函数 test() 中,如果你没有一个实例/对象(这里是一个 ViewController),你就不能调用协议(protocol)的方法>).一种可行的方法(但不一定是漂亮的方法)是在某处存储(例如作为全局变量)ViewController 的实例,以便在函数中重用它。

像这样:

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

id<MyDelegate> globalDelegate;

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

// rest of your file

有很多关于协议(protocol)和委托(delegate)模式的资源,比如 this guide from Apple .仔细阅读他们如何在 Cocoa & Cocoa Touch 中使用它。

关于c++ - Objective-C 和 Swift 之间的委托(delegate)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50430114/

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