2014-06-25 32 views
0

慢慢进入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", @"")];    
    }); 
}]; 

回答

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

的工作代码的例子,我是在迅速:)

2

你的Objective-C在斯威夫特完成块“(在这种情况下,现在所谓的“封闭”)将包含experimenting with this exact API所有的相同的信息:

  1. 参数标签和类型(在括号中的块的开始)
  2. 返回类型(由前面“ - >”)
  3. “在”从代码中分离签名

注意,这个方法的签名指定的参数类型,关键字,这样你真正需要做的还有为他们供应的名字:)(类型推断FTW!)另外,你的块返回'Void',所以我们不需要在这里包含返回类型。

这将使我们:

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