在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中的問題。告訴我們問題是什麼,我們會幫助你。 –