我试图了解如何在 iOS 上使用块。我已经阅读了 Apple 的文档,但是像往常一样,它们是模糊和不完整的,并且没有提到一些重要的信息。我也用谷歌搜索但没有成功。这就是我试图做的一个练习来理解这一点。
我创建了一个块来读取字符串并将字符串与之前读取的字符串进行比较。如果字符串不相同,返回YES,如果相同,返回NO。
我就是这样做的:
我在 .h 上声明了这一点
BOOL (^differentStrings)(void);
我在 .m 上声明了这一点,在 viewController 的 viewDidLoad 内
__block NSString * previousString;
__block NSString * currentString;
differentStrings = ^(void){
currentString = [self getString];
NSLog(@"%@", currentString); // not printing anything on console
if (![currentString isEqualToString:previousString]) {
previousString = currentString;
return YES;
} else {
return NO;
}
};
这就是我的使用方式:我有一个线程可以做到这一点:
if (differentStrings)
NSLog (@"strings are different);
这些是我遇到的问题:
- 该块总是返回 YES(字符串不同)
- 我不愿意在videDidLoad 中声明这个。我应该如何声明它,以便我可以在全局范围内使用它作为一种方法?我应该像使用方法一样放置这个吗?
- 我在块内调用方法“getString”。可以吗?
- 我觉得在.m 上声明块变量很奇怪。如我所见,我应该在 .h 上声明块变量,然后在 .m 上使用它们。我试图这样做,但收到一个错误。
- 我已经在块的第一行设置了一个调试点,但它并没有停在那里;
- 块内的 NSlog 行不打印任何内容。没有调用块吗?
你们能帮我解决这个问题吗?