Sta*_*ash 2 standards objective-c objective-c-blocks
我想知道这是不是很好的做法:
我有一个接受参数和回调块的方法,让我们说一下以下内容:
-(void)loginWithUsername:(NSString *)username andPassword:(NSString *)password withCompletion:(LoginManagerCompletionBlock)completionHandler;
Run Code Online (Sandbox Code Playgroud)
现在在这种特定情况下,没有完成处理程序就没有用于调用此方法,因为它触发了对登录Web服务的冗余调用(同样,它不会改变任何状态 - 不是客户端也不是服务器端).我想通过主动强制要求传递完成块以便进行此Web服务调用来避免这些情况.我有点认为这是Objective C协议中的"@required"方法.所以我的问题是:
谢谢
您可以使用函数属性nonnull(params),其中params是1个或多个以逗号分隔的参数编号,以指示参数不应为null(nonnull没有括号表示所有指针参数都不应为null).对于你的例子:
- (void) loginWithUsername:(NSString *)username
andPassword:(NSString *)password
withCompletion:(LoginManagerCompletionBlock)completionHandler
__attribute__((nonnull(3)));
Run Code Online (Sandbox Code Playgroud)
但是,虽然这是一个编译时检查并产生一个警告,但只有在直接传递null时才会这样做.如果参数值是一个计算结果为null的表达式,例如一个具有空值的变量,那么这将不会被捕获.
如果参数为null是一个错误,您可以使用NSParameterAssert(parameter)其中参数是方法参数之一的名称在方法本身中添加运行时检查,以检查此条件.此调用定义为打印错误消息,如果其参数的计算结果为false,则抛出异常,null计算结果为false.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |