我在 block 上遇到了麻烦,在 objective-c 上它运行良好,但我无法转换为 swift 3,
在 objective-c 中
typedef void (^PanCellToDeleteBlock)(NSIndexPath *cellIndexPath);
@interface MyCollectionViewCell : UICollectionViewCell<UIGestureRecognizerDelegate>
@property (copy , nonatomic) PanCellToDeleteBlock panCellToDeleteBlock;
在 swift 3 情况下
public typealias PanCellToDeleteBlock = (_ cell:NSIndexPath) -> Void
class MyCollectionViewCell: UICollectionViewCell,UIGestureRecognizerDelegate {
let panCellToDeleteBlock:PanCellToDeleteBlock? = nil
看起来不快......
这是我在同一个类(class)使用它的时候
在 objective-c 中
if (_panCellToDeleteBlock) {
_panCellToDeleteBlock(_cellIndexPath);
}
在快速的情况下,一切看起来都是错误的
if (self.panCellToDeleteBlock != nil) {
self.panCellToDeleteBlock(self.cellIndexPath)
}
这是必须疯狂的部分,这是在 viweController OC案例
cell.panCellToDeleteBlock = ^(NSIndexPath *cellIndexPath){
[weakSelf.dataArray removeObjectAtIndex:cellIndexPath.row];
[weakSelf.collectionView reloadData];
};
swift 部分我已经无能为力了....
最佳答案
Swift 3 的等价物是
public typealias PanCellToDeleteBlock = (IndexPath) -> Void
class MyCollectionViewCell: UICollectionViewCell,UIGestureRecognizerDelegate {
var panCellToDeleteBlock : PanCellToDeleteBlock?
self.panCellToDeleteBlock?(self.cellIndexPath)
cell.panCellToDeleteBlock = { [weak self] indexPath in
self?.dataArray.remove(at: indexPath.row)
self?.collectionView.reloadData()
}
关于ios - 将 block 形式的 objective-c 解决为 swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44993039/