如题,
协议中的实例方法,是可以自动补全的,例如:
id<MainServiceProtocol> obj = [[SIMBeeHive shareInstance] createService:@protocol(MainServiceProtocol)];
obj tes
// 这里会自动补全 MainServiceProtocol 协议中的实例方法
但如果是类方法,就无法自动补全,手打出来是没问题的:
Class<AClassServiceProtocol> aClassObj = [[SIMBeeHive shareInstance] createClassService:@protocol(AClassServiceProtocol)];
[(Class <AClassServiceProtocol>)aClassObj aClassMethod:@"" aStringParam2:@""];
// 这个方法是纯手打的
目前的猜想,xcode 的 Clang 自动补全压根没想过支持协议中的类方法,那有没有办法去修改 clang 去支持这个特性呢?
求指点!
1
iOCZS 48 天前
应该也是支持的吧
|
3
iOCZS 48 天前
|
4
wangyapu OP @iOCZS 抱歉,我前面忘了描述地精准一点了。 我这里的类是满足某个协议的动态类(虽然通过代码是能看出来)
像你写的,直接在现有的类上面注明满足某个协议这种,的确是可以代码提示的。 我这里的大前提是为了解耦,所以这个目标类,在当前文件里是不可见的,只能取出一个 Class 对象,即使注明这个 Class 对象符合某个协议,xcode 也不会提示方法名,但直接手打出来可以正常编译。 |
5
iOCZS 46 天前
@wangyapu 编译时能确定类型,就能有对应的提示。id<protocol>的时候,protocol 作为类型参考。但是 Class<protocol>这种是有问题的,因为它是有类型的,就是 Class ,这里我觉得 protocol 是多余的。
|