gpt4 book ai didi

objective-c - cocoa block 中的 typedef

转载 作者:行者123 更新时间:2023-12-03 17:33:46 25 4
gpt4 key购买 nike

我对简单的 Blocks 和 typedef 有疑问。考虑以下代码,我有一些 typedef 和两个方法,第二个被注释掉。我的疑问是关于第一个。我应该使用这个吗?将来可能会出现任何问题或情况吗?

typedef void (^MySuccessBlock)(MyServiceResponse *response); 
typedef void (^MyFailureBlock)(NSError *errorObject);

@property (nonatomic, copy)MySuccessBlock mySuccessBlock;
@property (nonatomic, copy)MyFailureBlock myFailureBlock;

//SHOULD I USE THIS?
- (void)myServiceWithCompletion:mySuccessBlock
failure:myFailureBlock;

//- (void)myServiceWithCompletion:(void (^)(MyServiceResponse *response))completion
// failure:(void (^)(NSError *errorObject))failure;

在实现文件中:

//If 1st one is used:
- (void)myServiceWithCompletion:aSuccessBlock
failure:aFailureBlock{

self.mySuccessBlock = aSuccessBlock;
self.myFailureBlock = aFailureBlock;

....
}

最佳答案

你应该使用这个:

- (void)myServiceWithCompletion:(MySuccessBlock)successBlock
failure:(MyFailureBlock)failureBlock;

请注意 MySuccessBlockMyFailureBlock 开头的大写字母,如 typedef 中所示。

事实上,当您声明时:

- (void)myServiceWithCompletion:mySuccessBlock
failure:myFailureBlock;

问题来自于您没有指定参数“mySuccessBlock”和“myFailureBlock”的类型。因此它们被视为默认类型 id 因为:

If a return or parameter type isn’t explicitly declared, it’s assumed to be the default type for methods and messages—an id.

就像你写:

- (void)myServiceWithCompletion:(id)mySuccessBlock
failure:(id)myFailureBlock;

id类型是指针, block 也是指针,所以不存在编译问题。但是由于黑色的参数和返回值,你可能会遇到执行问题!

关于objective-c - cocoa block 中的 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030448/

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