私はiOSには新しく、見つけたライブラリを元のものに変換することで、Swift(そしてObjective Cのビット)の学習に取り組んでいます。これまでのところ、私は大丈夫ですが、1つの部分を理解することに問題があります。ここで#defineはSwiftでどのように機能しますか?
#define RunSafeBlock(block, ...) block ? block(__VA_ARGS__) : nil
を、それはより多くのコンテキストである:どのようにこの#define
動作するようになっている
#import <AFNetworking.h>
// How would I write this in Swift?
#define RunSafeBlock(block, ...) block ? block(__VA_ARGS__) : nil
@interface Client()
@end
@implementation Client
- (void)requestWithBodyBlock:(void (^)(id<AFMultipartFormData> formData))bodyBlock completion:(ClientRequestCompletion)completion {
[self validateAccessToken:^(NSError *error) {
if (error) {
// What does RunSafeBlock do?
RunSafeBlock(completion, nil, error);
return;
}
// ...
}];
}
@end
AFNetworking
部品が本当に関連していないが、この例では、我々は要求を実行し、検証していますアクセストークン。 validateAccessToken
がエラーを返した場合は、すべてをRunSafeBlock
に渡して終了します。ここでは、スウィフトにあります。
import AFNetworking
// #define RunSafeBlock(block, ...) block ? block(__VA_ARGS__) : nil
class Client {
func requestWithBodyBlock(bodyBlock: (formData: AFMultipartFormData) -> Void, completion: ClientRequestCompletion) {
self.validateAccessToken({(error: NSError) -> Void in
if error != nil {
// RunSafeBlock(completion, nil, error)
return
}
// ...
})
}
}
私は実際にいくつかの指導をお願い申し上げます。前もって感謝します!
パーフェクト。ありがとうございました! –