gpt4 book ai didi

objective-c - 在 objective-c 中将 swift 函数作为参数传递

转载 作者:行者123 更新时间:2023-11-28 06:08:29 25 4
gpt4 key购买 nike

我有一个接受委托(delegate)的 swift 类 A。我有另一个 swift 类 B,它实现了委托(delegate)。现在 A 的对象是从 Objective-C 代码实例化的。

我需要将函数g作为参数传递给函数f。我该怎么做?

接受委托(delegate)的类:

class A {
func f(_ e: String, d D: @escaping ((String)->Void)) {
D() // Call the function that we recieved as a parameter
}
}

实现委托(delegate)的类:

class B {
func g(_ m: String) {
// Implementation.
}
}

如何从 obj-c 中调用:

A *a;
B *b;

[a f:@"someString" d:b.g] // How to pass the swift function as a parameter ?

最佳答案

你应该像这样将对 g 的调用封装到一个 Objective-C block 中:

[a f:@"someString" d:^(NSString *s) {
[b g:s];
}];

如果你还想保留 d 变量的参数函数,你需要一个闭包字典:

A *a = ...;
B *b = ...;
NSDictionary *myFunctions = @{
'g': ^(NSString *s) { [b g:s]; },
'h': ^(NSString *s) { [b h:s]; }
};
NSString *functionName = ...;

[a f:@"someString" d:myFunctions[functionName]];

关于objective-c - 在 objective-c 中将 swift 函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47468846/

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