将Objective-C函数调用转换为Swift

时间:2015-03-05 17:48:41

标签: ios objective-c swift closures objective-c-blocks

这就是我到目前为止......

func rightButtonItemsInRevealTableViewCell(revealTableViewCell: SWRevealTableViewCell!, handler:((Bool) -> (NSArray))!) {

    var item1: SWCellButtonItem = itemWithTitle("Delete", {
        (var success) in
            println("\(success)")
        }
    });

    item1.backgroundColor = UIColor.redColor();
    item1.tintColor = UIColor.whiteColor();
    item1.width = 75;

    return item1;
}

我发现this有点帮助,但我仍然遇到一些错误。

这是原始的Objective-C代码......

- (NSArray*)rightButtonItemsInRevealTableViewCell:(SWRevealTableViewCell *)revealTableViewCell {

    SWCellButtonItem *item1 = [SWCellButtonItem itemWithTitle:@"Delete" handler:^(SWCellButtonItem *item, SWRevealTableViewCell *cell)
    {
        NSLog( @"Delete");
    }];

    item1.backgroundColor = [UIColor redColor];
    item1.tintColor = [UIColor whiteColor];
    item1.width = 75;

    return @[item1];
}

这是在标题声明

+ (instancetype)itemWithTitle:(NSString*)title handler:(BOOL(^)(SWCellButtonItem *item, SWRevealTableViewCell* cell))handler;

和.m文件中的定义

+ (instancetype)itemWithTitle:(NSString *)title handler:(BOOL(^)(SWCellButtonItem *, SWRevealTableViewCell *))handler 
{
    return [[SWCellButtonItem alloc] initWithTitle:title image:nil handler:handler];
}

2 个答案:

答案 0 :(得分:0)

func rightButtonItemsInRevealTableViewCell(revealTableViewCell : UITableViewCell) -> NSArray {

    var item1 : SWCellButtonItem = SWCellButtonItem("Delete", handler: ((item : SWCellButtonItem, cell : SWRevealTableViewCell) -> (Void) in {
            NSLog("delete")
        }))
    item1.backgroundColor = UIColor.redColor()
    item1.tintColor = UIColor.whiteColor()
    item1.width = 75
    return [item1];
}

我希望我没有忘记任何事情,试试看!

答案 1 :(得分:0)

正确的解决方案是

let item : SWCellButtonItem = SWCellButtonItem(title:"Delete", handler:{(item:SWCellButtonItem!, cell:SWRevealTableViewCell!)->(Bool) in

        println("Delete handler")
        return false
    } )