我正在尝试将apple's
Photos
样本转换为Swift
以满足我的需求。但是,当我在Objective-C中看到此符号^
时,我总是遇到问题。所以,如果有人想向我解释,试着去清理并理解它。
这是我试图转换的代码
dispatch_async(dispatch_get_main_queue(), ^{
// Loop through the section fetch results, replacing any fetch results that have been updated.
NSMutableArray *updatedSectionFetchResults = [self.sectionFetchResults mutableCopy];
__block BOOL reloadRequired = NO;
[self.sectionFetchResults enumerateObjectsUsingBlock:^(PHFetchResult *collectionsFetchResult, NSUInteger index, BOOL *stop) {
PHFetchResultChangeDetails *changeDetails = [changeInstance changeDetailsForFetchResult:collectionsFetchResult];
if (changeDetails != nil) {
[updatedSectionFetchResults replaceObjectAtIndex:index withObject:[changeDetails fetchResultAfterChanges]];
reloadRequired = YES;
}
}];
if (reloadRequired) {
self.sectionFetchResults = updatedSectionFetchResults;
[self.tableView reloadData];
}
});
这是我的快捷代码。
dispatch_async(dispatch_get_main_queue(), {
let updatedSectionFetchResults = self.sectionFetchResults.mutableCopy() as! NSMutableArray
let reloadRequired: Bool = false
self.sectionFetchResults.enumerateObjectsUsingBlock(collectionsFetchResult: PHFetchResult, index: NSInteger, stop: Bool) {
let chageDetails: PHFetchResultChangeDetails = changeInstance.changeDetailsForFetchResult(collectionsFetchResult)
if changeDetails != nil {
updatedSectionFetchResults.replaceObjectAtIndex(index, withObject: changeDetails.fetchResultAfterChanges)
}
}
})
这一行self.sectionFetchResults.enumerateObjectsUsingBlock(collectionsFetchResult: PHFetchResult, index: NSInteger, stop: Bool)
我不断获得Extra argument collectionFetchResult in call
答案 0 :(得分:1)
^符号通常表示Objective-C块名称的出现位置。
通常,未指定名称会导致匿名阻止。
http://goshdarnblocksyntax.com/是有关块可以在Objective-C中采用的最常见表单的快速参考。
Apple documentation on blocks也是理解不同形式的宝贵参考。
使用Swift,闭包取代了块,并以不同的语法以相同的方式操作。关于http://goshdarnclosuresyntax.com/的闭包的相应快速参考。