使用Swift Closure的NSIndexSet.enumerateIndexesUsingBlock

Bad*_*Cat 2 iteration macos cocoa nsindexset swift

我正在编写一种方法将数据从表视图复制到粘贴板但是如果选择了任何行,它应该只复制选定行中的数据,所以我需要迭代索引集...

func createExportText(fromArrayController:NSArrayController) -> String
{
    var indexSet = fromArrayController.selectionIndexes;
    /* None were selected, so process them all! */
    if (indexSet.count == 0)
    {
        indexSet = NSIndexSet(indexesInRange: NSMakeRange(0, fromArrayController.arrangedObjects.count));
    }

    var rows = "";
    indexSet.enumerateIndexesUsingBlock
    {
        // What code goes here?
    }

    return rows;
}
Run Code Online (Sandbox Code Playgroud)

我在解释方法签名时遇到了一些麻烦,我应该如何编写闭包代码.我得到的错误信息也不是特别清楚(Cannot invoke 'enumerateIndexesUsingBlock' with an argument list of type '((_, _) -> Int)').有人可以帮帮我吗?

编辑:

工作方式:

func createExportText(fromArrayController:NSArrayController) -> String
{
    var rows = "";
    var indexSet = fromArrayController.selectionIndexes;
    let objects = (fromArrayController.arrangedObjects as! NSArray);

    /* No rows were selected, so process them all! */
    if (indexSet.count == 0)
    {
        indexSet = NSIndexSet(indexesInRange: NSMakeRange(0, objects.count));
    }

    indexSet.enumerateIndexesUsingBlock
    {
        (i, stop) -> Void in

        let obj:AnyObject = objects[i];
        let str = obj.valueForKey("string") as! String;
        rows += "\(str)";
        if (i < indexSet.lastIndex) { rows += "\n"; }
    }

    return rows;
}
Run Code Online (Sandbox Code Playgroud)

kis*_*umi 5

在多行闭包中,您可能应该编写参数列表并显式返回值.您可以写如下:

indexSet.enumerateIndexesUsingBlock { (index, stop) -> Void in
    println(index)
}
Run Code Online (Sandbox Code Playgroud)