在Objective-C这是很常见的使用布尔指针停止枚举如:最好的方式来实现的指针在斯威夫特
[myArray rh_iterate:^(id element, int index, BOOL *stop){
// Do cool stuff
*stop = YES;
}];
我实现了这个名字:
// This is in a category of NSArray
- (void)rh_iterate:(void (^)(id, int, BOOL *))block
{
if (!block) { return; }
BOOL stop = NO;
for (int i = 0; i < self.count; i++) {
block(self[i], i, &stop);
if (stop) { return; }
}
}
我现在我正在Swift中实现我的这个版本,但是并不依赖任何Objective-C源代码。我知道swift喜欢限制指针的访问,所以实现它的最好方法是什么? (理想情况下完全避免指针。)
编辑:
最直接的方法是:
func rh_iterate(callback: (Element, Int, UnsafeMutablePointer<Bool>) ->()) {
var stop: Bool = false
for (index, element) in self.enumerate() {
callback(element, index, &stop)
if stop { return }
}
}
我的绝招,从一种语言翻译成另一种是......忘记了语言。用简单的英语句子*阅读原文*,例如“好的,它需要这个东西,然后它循环并删除它,然后......”。一旦你把这个过程当作句子,用新语言重新实现它比用真正的翻译更容易。 – Moritz
@EricD进入Swift的图像汇编程序员询问如何在寄存器1上“隐藏”1 – Alexander
准确地说。除非你只是为了好奇而问,否则你不一定要用Objective-C的相同逻辑来解决Swift中的问题。告诉我们问题是什么,我们会帮助你。 –