【问题标题】:Completion Blocks Syntax in SwiftSwift 中的完成块语法
【发布时间】:2014-06-25 14:24:41
【问题描述】:

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

【问题讨论】:

    标签: objective-c block swift


    【解决方案1】:
    self.eventStore.requestAccessToEntityType(type) {
        (granted: Bool, err: NSError!) in
        dispatch_async(dispatch_get_main_queue()) {
            ...
        }
    }
    

    对于一个工作代码的例子,我是experimenting with this exact API swift :)

    【讨论】:

      【解决方案2】:

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

      1. 参数标签和类型(括号中的块开头)
      2. 返回类型(以'->'开头)
      3. 将签名与代码分开的关键字“in”

      请注意,方法的签名指定了参数的类型,因此您真正需要做的就是为它们提供名称 :)(类型推断 FTW!)此外,您的块返回“Void”,所以我们不这样做也不需要在此处包含返回类型。

      这会给我们:

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

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多