SWIFT闭包语法-从Objective C转换

我在Objective C中使用块编写了以下函数,并且试图将其转换为swift,但是我将头撞在墙上,无法对其进行排序。

这是Objective C中的代码

typedef void (^ResponseBlock) (BOOL succeeded, NSArray* data);

- (void)findAllMediaFromDate:(NSDate*)createdAtDate block:(ResponseBlock)block
{
NSMutableArray *results = [NSMutableArray array];
PFQuery *query = [PFQuery queryWithClassName:PARSE_MODEL_ACTIVITIES];
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        for (ActivityObject *object in objects) {
            if ([object.media.type isEqualToString: @"video"] || [object.media.type      isEqualToString: @"photo"]) {
                [results addObject:object];
            }
        }

        block(YES, results);
    }
    else {

    }
}];
}

现在这就是我在SWIFT中拥有的东西。这是一个不同的函数体,但是我尝试的语法是相同的...

func userQuery (){   //This needs to return an array as ABOVE
    var results = [UserModel]()
    println("NM: userQuery")
    var query = UserModel.query()
    query.whereKey("objectId", equalTo:"7N0IWUffOZ")
    query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in
        if (objects != nil) {
            NSLog("yea")
            for object in objects{
                results.append(object as UserModel)
                //Need to return the array to the userQuery function
            }

        } else {
            NSLog("%@", error)
        }

    }

}

```

您可以像这样添加闭包参数:

func userQuery(completionHandler: (succeeded: Bool, array: [UserModel]?) -> ()) {
    // do your other stuff here

    if objects != nil {
        // build results
        completionHandler(succeeded: true, array: results)
    } else {
        // return failure
        completionHandler(succeeded: false, array: nil)
    }
}

显然,将您的array参数更改为所需的任何名称(重命名,更改类型,更改任何内容),但是基本思想是拥有可选的数组返回类型。

您可以使用结尾闭包语法来调用它,如下所示:

userQuery() {
    success, results in

    if success {
        // use results here
    } else {
        // handle error here
    }
}

顺便说一句,如果您喜欢Objective-Ctypedef模式,则Swift中的等效项是typealias

typealias ResponseClosure = (succeeded: Bool, array: [UserModel]?) -> ()

func userQuery(completionHandler: ResponseClosure) {
    // the same as above
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Objective-C块转换为Swift闭包

来自分类Dev

将Objective-C块转换为Swift闭包

来自分类Dev

将回调/闭包从 Objective C 转换为 Swift

来自分类Dev

在Objective-C中将闭包(Swift)转换为闭包(block?)

来自分类Dev

在Objective-C框架中使用Swift闭包

来自分类Dev

使用Swift枚举的Objective-C闭包

来自分类Dev

通过`id`在Objective-C中调用Swift闭包

来自分类Dev

将Swift 2闭包转换为Objective-C块

来自分类Dev

将Objective-C块变量转换为Swift闭包变量?

来自分类Dev

如何将Objective-C块转换为Swift闭包?

来自分类Dev

Swift-帮助从Objective C语法转换

来自分类Dev

快速将Objective-C块转换为闭包

来自分类Dev

快速将Objective-C块转换为闭包

来自分类Dev

iOS中块(Objective-C)和闭包(Swift)之间的区别

来自分类Dev

Swift中的闭包,Objective-C中的块:它们的用处和使用时间

来自分类Dev

使用尾随闭包的Swift到Objective-C调用会调用错误的方法

来自分类Dev

如何从 Objective-C 调用带有闭包的 Swift 异步方法

来自分类Dev

Swift让计算属性转换为Objective C语法

来自分类Dev

将Objective-C转换为swift:@()语法

来自分类Dev

如何将此Swift语法转换为Objective-C?

来自分类Dev

从Objective-C到Swift的转换问题

来自分类Dev

从Objective-C到Swift,指针转换

来自分类Dev

从Objective-C转换为Swift(TestFlight)

来自分类Dev

Swift:转换此Objective C方法

来自分类Dev

从Objective-C转换为Swift

来自分类Dev

将代码从 Swift 转换为 Objective C?

来自分类Dev

将Swift闭包作为属性存储在Objective-C类中,其中使用typedef声明该块

来自分类Dev

闭包快速调用Objective-C函数

来自分类Dev

Objective C结构语法

Related 相关文章

热门标签

归档