完成阻止Swift中的语法

时间:2014-06-25 14:24:42

标签: objective-c block swift

慢慢进入Swift但仍在努力完成阻止。以下代码在Swift中的外观如何?

[self.eventStore requestAccessToEntityType:type completion:^(BOOL granted, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self alertViewWithDataClass:((type == EKEntityTypeEvent) ? Calendars : Reminders) status:(granted) ? NSLocalizedString(@"GRANTED", @"") : NSLocalizedString(@"DENIED", @"")];            
    });
}];

2 个答案:

答案 0 :(得分:3)

self.eventStore.requestAccessToEntityType(type) {
    (granted: Bool, err: NSError!) in
    dispatch_async(dispatch_get_main_queue()) {
        ...
    }
}

有关工作代码的示例,我在swift中是experimenting with this exact API:)

答案 1 :(得分:2)

Swift中的Objective-C'完成块'(在此上下文中称为'闭包')将包含所有相同的信息:

  1. 参数标签和类型(在括号中的块的开头)
  2. 返回类型(以' - >'开头)
  3. 关键字'in'将签名与代码分开
  4. 请注意,方法的签名指定了参数的类型,所以你真正需要做的只是它们的供应名称:)(类型推断FTW!)此外,你的块返回'Void'所以我们不要这里也需要包含返回类型。

    那会给我们:

    self.eventStore.requestAccessToEntityType(type) { (granted, err) in
        dispatch_async(dispatch_get_main_queue()) {
            ...other stuff...
        }
    }