【发布时间】:2023-03-13 05:40:01
【问题描述】:
我正在尝试创建一个函数,让我多次执行相同的操作。这次我决定用一个块去。但是在编写以下代码后:
- (BOOL)readyForProcessing {
void (^notDeclaredError)(id) = ^(id missingObject) {
NSString *missingObjectName = NSStringFromSelector(@selector(missingObject));
NSString *errorDescription = [NSString stringWithFormat:@"You need to provide %@ property", missingObjectName];
[self configureErrorWithLocalizedDescription:errorDescription];
};
if (!self.delegate) notDeclaredError(self.delegate);
return (self.error == nil);
}
我在声明missingObjectName的行中收到警告。
Undeclared selector 'missingObject'
我知道它可能会尝试从missingObject 生成NSString 而不是delegate。如何以这种方式传递它,输出将是delegate 并且代码将在块内?
【问题讨论】:
-
警告你当前类中没有方法
-(void) missingObject。你到底想用这条线实现什么? -
写
if (!self.delegate) notDeclaredError(@"self.delegate");会不会更容易——只需将字符串直接传递给块。 ` -
我正在尝试将属性名称拉到字符串中。我知道有这样的方法,我在问题的最后写了它。我想知道如何提取属性的名称而不是这个 missingObject ivar。
-
不够动态。稍后将进行大量重构,因为此方法不会用于 1 个属性。更改名称将导致一切无效。最好将
NSStringFromSelector的结果作为参数传递,但我想知道如何在块内进行。 -
如果 self.delegate 是
nil那么你将实际执行notDeclaredError(nil)因为self.delegate将在运行时进行评估,然后再传递给块。
标签: ios objective-c iphone objective-c-blocks objective-c-runtime