gpt4 book ai didi

Objective-C:如何将对象作为 block 参数传递给需要其基类的方法?

转载 作者:太空狗 更新时间:2023-10-30 03:36:40 31 4
gpt4 key购买 nike

如果我有以下对象:

@interface Simple : NSObject

@end

@interface Complex : Simple

@end

还有另一个对象:

@interface Test : NSObject 

+(void) doSomething:(void (^)(Simple*)) obj;

@end

如果我像这样调用方法,一切正常:

[Test doSomething:^(Simple * obj) {

}];

当我尝试这样调用它时:

[Test doSomething:^(Complex * obj) {

}];

编译器说:

不兼容的 block 指针类型将“void (^)(Complex *__strong)”发送到“void (^)(Simple *__strong)”类型的参数

因为 Complex 扩展了 Simple,我认为这会起作用,就像在 Java 中一样。

有没有办法以某种方式实现这一目标?

最佳答案

不幸的是,这是 Blocks API 的限制。如果愿意,您可以选择完全放弃类型安全并将 block 声明为:

+(void) doSomething:(void (^)(id)) obj;

它允许您设置 block 参数的类。但同样,这在类型方面完全不安全

关于Objective-C:如何将对象作为 block 参数传递给需要其基类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260578/

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