swift - 如何将完成 block 传递给 Swift 中的另一个类

标签 swift block

在 Objective-C 中,我使用了这种处理完成 block 的方法,现在必须将其转换为 Swift:

DetailDisplayController.h

typedef void (^AddedCompletitionBlock)(BOOL saved, NSString *primarykey, NSUInteger recordCount);

@interface DetailDisplayController : UITableViewController

@property (nonatomic, copy) AddedCompletitionBlock completionBlock;
@property (strong, nonatomic) Details *detail;

DetailDisplayController.m

- (void) saveClicked:(id)sender
{  
   // retrieve PK
   NSString *objectId = [[[_detail objectID] URIRepresentation] absoluteString];

   if (self.completionBlock != nil)
   {
       self.completionBlock(_rowChanged, objectId, [_fetchedResultsController.fetchedObjects count]);
   }

_rowChanged 和 _fetchedResultsController 是实例变量

DetailViewController.m 调用类中,使用传递的 block

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   if ([segue.identifier isEqualToString:@"DetailDisplay"])
   {
       DetailDisplayController *detailDisplayController = segue.destinationViewController; 
       ...
       detailDisplayController.completionBlock = ^(BOOL saved, NSString *sorter, NSUInteger recordCount)
       {
        if (saved)
           ...

我如何在 Swift 中执行此操作?

最佳答案

以下是您在 Swift 中需要的等效部分:

typealias AddedCompletionBlock = (saved: Bool, primaryKey: String, recordCount: Int) -> Void

var completionBlock: AddedCompletionBlock? = nil

completionBlock = {saved, primaryKey, recordCount in
    print("\(saved), \(primaryKey), \(recordCount)")
}

completionBlock?(saved: true, primaryKey: "key", recordCount: 1)

您可能想好好阅读 "Function Types""Closures" Apple Swift 文档的部分。

关于swift - 如何将完成 block 传递给 Swift 中的另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588661/

相关文章:

ios - 从元数据字典访问 GPS 坐标

ios - Swift 和 Firebase - 数据库和用户默认值

html - 包含行内 block 元素的 block 元素的高度

ios - 来自 block 的 @autoreleasepool 中的 EXC_BAD_ACCESS

android - 来自 AsyncTask block UI 的线程

arrays - Swift - 数组过滤两个数字之间的值

iphone - 如何获取 UNCONFIRMED 账户的 AWSCognitoIdentityUser 对象?

ios - Swift 正则表达式匹配 unicode

php - 如何阻止浏览器调用 iframe 的内容

php - 在 block 输出上应用 Smarty 修改器