objective-c - Swift怎么像OC中一样重写NSOperation?

浏览:48日期:2023-11-22

问题描述

#import 'AnimOperation.h'#define KScreenWidth [[UIScreen mainScreen] bounds].size.width@interface AnimOperation ()@property (nonatomic, getter = isFinished) BOOL finished;@property (nonatomic, getter = isExecuting) BOOL executing;@property (nonatomic,copy) void(^finishedBlock)(BOOL result,NSInteger finishCount);@end@implementation AnimOperation@synthesize finished = _finished;@synthesize executing = _executing;+ (instancetype)animOperationWithUserID:(NSString *)userID model:(GiftModel *)model finishedBlock:(void(^)(BOOL result,NSInteger finishCount))finishedBlock; { AnimOperation *op = [[AnimOperation alloc] init]; op.presentView = [[PresentView alloc] init]; op.model = model; op.finishedBlock = finishedBlock; return op;}- (instancetype)init{ self = [super init]; if (self) {_executing = NO;_finished = NO; } return self;}- (void)start { if ([self isCancelled]) {self.finished = YES;return; } self.executing = YES;[[NSOperationQueue mainQueue] addOperationWithBlock:^{_presentView.model = _model;_presentView.originFrame = _presentView.frame;[self.listView addSubview:_presentView];[self.presentView animateWithCompleteBlock:^(BOOL finished,NSInteger finishCount) { self.finished = finished; self.finishedBlock(finished,finishCount);}]; }]; }#pragma mark - 手动触发 KVO- (void)setExecuting:(BOOL)executing{ [self willChangeValueForKey:@'isExecuting']; _executing = executing; [self didChangeValueForKey:@'isExecuting'];}- (void)setFinished:(BOOL)finished{ [self willChangeValueForKey:@'isFinished']; _finished = finished; [self didChangeValueForKey:@'isFinished'];}

这个类覆盖了原来nsoperation中的start方法请问在swift中该怎样写 尤其是setter方法【手动触发KVO】这里谢谢

问题解答

回答1:

start 直接 override 就可以了。但是 exciting,finished 都是只读属性。

推荐使用:PSOperations

相关文章: