Music_Player3/Pods/DownloadButton/Pod/Classes/PKMacros.h
2024-05-29 17:31:45 +08:00

43 lines
1.8 KiB
C

//
// PKMacros.h
// Download
//
// Created by Pavel on 30/05/15.
// Copyright (c) 2015 Katunin. All rights reserved.
//
#ifndef Download_PKMacros_h
#define Download_PKMacros_h
#pragma mark - Block helpers
#define BlockSafeRun(block_, ...) do { if ((block_) != NULL) (block_)(__VA_ARGS__); } while (NO)
#define BlockSafeRunEx(defaultValue_, block_, ...) (((block_) != NULL) ? (block_)(__VA_ARGS__) : (defaultValue_))
#define BlockSafeRunOnTargetQueue(queue, block, ...) do { if ((block) != NULL) dispatch_async(queue, ^{ (block)(__VA_ARGS__); }); } while (0)
#define BlockSafeRunOnMainQueue(block, ...) BlockSafeRunOnTargetQueue(dispatch_get_main_queue(), (block), __VA_ARGS__)
#if __has_feature(objc_arc)
#define BlockWeakObject(o) __typeof__(o) __weak
#define BlockWeakSelf BlockWeakObject(self)
#define BlockStrongObject(o) __typeof__(o) __strong
#define BlockStrongSelf BlockStrongObject(self)
#define WeakifySelf BlockWeakSelf ___weakSelf___ = self; do {} while (0)
#define StrongifySelf BlockStrongSelf self = ___weakSelf___; do {} while (0)
#endif // __has_feature(objc_arc)
#define SafeObjClassCast(destClass_, resultObj_, originalObj_) \
destClass_ *resultObj_ = (destClass_ *)originalObj_;\
NSAssert2((resultObj_) == nil || [(resultObj_) isKindOfClass:[destClass_ class]],\
@"Incorrect cast: original object (%@) could not be casted to the destination class (%@)", \
(originalObj_), NSStringFromClass([destClass_ class]))
#define SafeObjProtocolCast(destProtocol_, resultObj_, originalObj_) \
id <destProtocol_> resultObj_ = (id <destProtocol_>)originalObj_;\
NSAssert2((resultObj_) == nil || [(resultObj_) conformsToProtocol:@protocol(destProtocol_)],\
@"Incorrect cast: original object (%@) could not be casted to the destination protocol (%@)", \
(originalObj_), NSStringFromProtocol(@protocol(destProtocol_)))
#endif // Download_PKMacros_h