声明&使用块实现iOS方法,但没有其他参数

时间:2012-07-12 22:17:40

标签: objective-c ios block

需要帮助来声明和实现一个带有块但没有参数的方法。 听起来很简单,但我错过了一些东西,因为这有效:

- (void) RetrieveDevices: (NSInteger)count
         success:(void (^)(NSMutableArray *devices))success
         failure:(void (^)(aylaError *err))failure;

- (void)RetrieveDevices:(NSInteger)count
        success:(void (^)(NSMutableArray *devices))successBlock
        failure:(void (^)(aylaError *err))failureBlock
{

}

这不会编译,因为它期待一个方法体:

- (void) RetrieveDevices
             success:(void (^)(NSMutableArray *devices))success
             failure:(void (^)(aylaError *err))failure;

- (void)RetrieveDevices
            success:(void (^)(NSMutableArray *devices))successBlock
            failure:(void (^)(aylaError *err))failureBlock
{

}

感谢帮助。

4 个答案:

答案 0 :(得分:12)

块是参数。所以你想要一个带有两个参数的方法签名。 试试例如:

- (void) RetrieveDevicesWithSuccess:(void (^)(NSMutableArray *devices))success
                            failure:(void (^)(aylaError *err))failure;

答案 1 :(得分:1)

问题是“RetrieveDevices”和“success”/“failure”之间的换行符和空格。试试这个:

- (void)RetrieveDevicesOnSuccess:(void (^)(NSMutableArray *devices))successBlock
                       onFailure:(void (^)(aylaError *err))failureBlock
{

}

答案 2 :(得分:0)

您可以执行以下操作:

- (void) RetrieveDevicesSuccess:(void (^)(NSMutableArray *devices))success
                        failure:(void (^)(aylaError *err))failure;

答案 3 :(得分:0)

问题不在于块语法,而是第二个示例的方法声明语法。 没有参数的方法声明为:

- (RETURN_TYPE)method_name

并将带参数的方法声明为:

- (RETURN_TYPE)method_name_part1:(PARAMETER_TYPE1)parameter1 name_part2:(PARAMETER_TYPE2)parameter2...

第一个示例具有正确的语法,具有void返回类型和三个参数,第二个示例在方法名称后面有一个空格,这就是编译器期望该方法的主体(他将其解释为no)的原因参数方法)。

另请注意,按照惯例,方法名称以小写字母开头。