gpt4 book ai didi

ios - 方法参数中的协议(protocol)一致性是可选的吗?

转载 作者:行者123 更新时间:2023-11-29 11:39:24 26 4
gpt4 key购买 nike

如果方法是在另一个协议(protocol)中声明的,那么 Objective-C 编译器是否不强制方法参数应符合协议(protocol)?我有一些看起来像这样的代码:

@protocol FooProtocol<NSObject>

-(UIView <BarProtocol>*)barView;

@end

@protocol BarProtocol<NSObject>

-(BOOL)foobar;

@end

@interface FooController : NSObject<FooProtocol>

@end

@implementation FooController {
UIView *_view;
}

-(UIView *)barView {
return _view;
}

@end

并且编译器不会提示 barViewFooController不返回 UIView *符合 BarProtocol .

最佳答案

在 Objective C 和 Swift 中,方法是按名称调用的(为了加快速度,如果没有冲突,只比较选择器名称的散列)。参数类型的返回类型不影响选择器名称。

这意味着如果您从方法返回不同的类型,在运行时不会有问题,直到您对返回的对象执行一些无效操作(例如,返回的 View 未实现所需的协议(protocol)并且您调用了此方法).

Clang 会将此检测为警告而不是错误,好的做法是修复此类警告。事实上,强烈建议在编译期间使用 -Wall 开关。

另请注意,协议(protocol)不必由类显式实现。如果类具有所有匹配的方法并且它会在运行时工作就足够了。

关于ios - 方法参数中的协议(protocol)一致性是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47444429/

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