Xcode 自动完成块内块(以及它们所在的块......)

2024-02-29

如何设置一个块属性,该属性将另一个块属性作为参数,以便自动完成功能为两个块提供所有必需的参数?

为了进一步解释,我将演示自动完成功能如何仅适用于一个块属性。

In AppDelegate.h,为所有需要访问 block 属性的类创建一个引用 AppDelegate 类的便捷方法:

#define AppServices ((AppDelegate *)[[UIApplication sharedApplication] delegate])

然后,定义块:

typedef void (^LogEvent)(NSString *context, NSString *entry, LogTextAttributes logTextAttributes, dispatch_block_t block);

然后,将该块指定为属性:

@property (copy, nonatomic, readwrite) LogEvent logEvent;

在 AppDelegate.m 中,编写一个返回 ???n 的方法(我不确切知道我要返回什么;我只知道它有效 - 它是一个块吗:

- (LogEvent)logEvent
{
    return ^(NSString *context, NSString *entry, LogTextAttributes logTextAttributes, dispatch_block_t block) {
       ...task A...
       block();
    };
}

在另一个类文件中,导入包含块属性的标头:

#import "AppDelegate.h"

然后,开始输入名称LogEvent块属性(logEvent),并让自动完成填写所需的参数:

AppServices.logEvent(<#NSString *context#>, <#NSString *entry#>, <#LogTextAttributes logTextAttributes#>, <#^(void)block#>)

要使用它,您必须将占位符替换为实际值,并且必须将 block 替换为:

^{ ...block... }

以下是现实场景中的示例:

AppServices.logEvent([NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__], @"Starting network service browser...", LogTextAttributes_Operation, ^(){
    ...task B...
    });

这将执行任务 A,然后执行任务 B。我想要做的是定义两个块,将它们指定为属性,然后将一个块作为参数添加到另一个块;然后,当我输入接受另一个作为参数的块的名称时,我希望 Xcode 自动完成它们所需的参数。例如:

对于名为的块属性RunTask它需要一个参数作为参数dispatch_block_t named block,我希望在相同的设置下,输入RunTask会产生这个:

RunTask(<#^(void)block#>)

所以,如果dispatch_block_t block的参数LogEvent类型定义被替换为RunTask:

 void (^LogEvent)(..., RunTask runTask);

然后,Xcode会自动完成LogEvent像这样:

AppServices.logEvent(..., ^{ ...task B... });

顺便说一句,如何使用 LogEvent 的原始dispatch_block_t参数,自动完成将执行与dispatch_async的then块参数相同的操作:

dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)

当您输入dispatch_async时,Xcode会为两个必需参数提供占位符。如果按两次 Tab 键,块(最后一个)参数将以蓝色突出显示;如果按 Return 键,则会发生以下情况:

dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, ^{
        <#code#>
    })

块语句占位符变成块语句,块内有代码占位符。我想知道该怎么做...


以下代码向您展示了如何设置块内块,以便 Xcode 在您使用该块时自动完成参数和返回值:

在头文件中:

typedef BOOL (^Condition)(void);
typedef void (^Success)(void);
typedef void (^Failure)(void);
typedef void (^Task)(Condition condition, Success success, Failure failure);

@property (copy, nonatomic, readwrite) Task task;
@property (copy, nonatomic, readwrite) Condition condition;
@property (copy, nonatomic, readwrite) Success success;
@property (copy, nonatomic, readwrite) Failure failure;

在实现文件中:

- (Task)task
{
    return ^(Condition condition, Success success, Failure failure) {
        if (condition())
        {
            success();
        } else {
            failure();
        }
    };
}

在授予对 Task 属性的访问权限的任何类的实现文件中,键入属性的路径以及属性名称本身,直到 Xcode 自动完成其余部分:

AppServices.task(<#^BOOL(void)condition#>, <#^(void)success#>, <#^(void)failure#>)

按 T​​ab 键前进至第一个参数 (condition),然后按回车键;重复其余两个参数(success and failure):

AppServices.task(^BOOL{
        <#code#>
    }, ^{
        <#code#>
    }, ^{
        <#code#>
    })

Replace code使用您的代码,确保为返回非 void 类型的任何块返回适当的值)(condition回报BOOL):

[class].task(^BOOL{
        return TRUE;
    }, ^{
        NSLog(@"TRUE");
    }, ^{
        NSLog(@"FALSE");
    });

在此示例中,任务块执行Success or Failure块取决于指定条件的返回值Condition block.

我的预期用途比这个例子要复杂和实用得多;但是,就“如何做”而言,它会做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode 自动完成块内块(以及它们所在的块......) 的相关文章

随机推荐

  • 如何在 Ruby 中访问原始命令行参数字符串?

    我正在尝试访问 Ruby 中的原始命令行参数字符串 即 不使用预分割 分隔的 ARGV 数组 有谁知道如何做到这一点 例如 gt ruby test rb command line arguments 我希望能够判断 line 周围是否有引
  • oauth2Client.getToken 缺少刷新令牌

    我有一个小型快递服务器 有两条路线 然后它将 json 令牌写入文件 我知道非常不安全 由于某种原因没有refresh token 在文档中有一条评论offline for access type gets refresh token 已经
  • 在 Maven 构建期间将文件添加到 jar

    我试图在执行 Maven 构建时将许可证文件添加到我的所有 jar 中 我有每个类文件的许可证 但我希望将 License txt 添加到每个 jar 中的每个 META INF 文件夹 我的项目有一个主 pom 其中有六个模块 然后这些模
  • 发送相机意图后立即调用 onActivityResult

    我正在使用相机意图在我的应用程序中启动相机 但是一旦意图被触发onActivityResult被解雇了 我什至还没有拍照 当我拍照时 选择它并返回到我的活动onActivityResult根本没有被叫到 这是我启动相机的方法 Package
  • 使用 Visual Studio 构建伪语言 (qps-ploc) 附属程序集

    我已经生成了应用程序资源文件的伪本地化版本 例如Order Summary and Payment本地化为 O r d e r S u m m a r y a n d P a y m e n t 以便我们可以在获得实际翻译之前测试本地化错误
  • 如何在Reactjs中点击按钮重定向到另一个页面

    我想使用 React 创建一个基本的 Web 应用程序 我已经实现了创建按钮 我想在单击按钮时重定向到另一个页面 下面是我的 App js 代码 import React from react import logo from logo s
  • 在Python中使用PIL压缩PNG图像

    我有一个用 Selenium Builder 记录的 python 脚本 它使用以下命令获取网页的完整浏览器屏幕截图 fileName Screenshot1 png webDriverInstance save screenshot fi
  • 如何将 WooComerceAPI 集成到 React 中?

    我想通过 API 在 React 上接收数据到我的网站 我按照文档中所述执行了所有操作 执行了安装npm install save woocommerce api 使用文档中的参数创建对象http woocommerce github io
  • 无法验证包:727047181.itmsp

    我在存档文件后在应用程序商店中上传了构建版本 它将在我收到此错误时上传构建版本 1 Apple的Web服务操作不成功 2 无法验证包 727047181 itmsp 3 错误 ITMS 9000 无法更改捆绑包标识符的当前值 ue com
  • 使用 PHP 从 Google Chrome 书签导出中提取数据

    我想将我的 google chrome 书签放入数据库 所以我的第一步是使用 PHP 从 chrome 导出 html 文件并将数据放入变量中 我希望获得一些能够运行的 PHP 代码下面的数据 它会将 URL ADD DATE ICON 和
  • 无法通过管道以自定义方式重命名下载的图像

    我使用 python 的 scrapy 模块创建了一个脚本 从 torrent 站点下载并重命名电影图像 并将它们存储在 scrapy 项目内的文件夹中 当我按原样运行脚本时 我发现它正确地下载了该文件夹中的图像 此时 脚本正在使用 req
  • javascript从所选国家/地区值中选择城市

    我有来自这里的国家数据库http www webmasterworld com html 3018309 htm http www webmasterworld com html 3018309 htm有239个国家 每个国家都有价值 在选
  • 这个指针类型防水吗?

    我正在尝试设计一种自定义类型 可以在需要窗口句柄或其他类型指针的 API 中使用 并且适用于 VBA 可以运行的所有系统 这是我所得到的 If Win64 1 And VBA7 0 Then Public Type LongLong 64
  • Chart.js 上的悬停模式

    当您未将鼠标悬停在折线图中的特定 点 上时 是否可以激活悬停 I want that每当我将鼠标悬停在图表的任何部分上时就会激活特定的工具提示 Edit 像这样的东西http watchstocks herokuapp com http w
  • 减少纬度和经度点数的最快方法

    我正在尝试减少并组合一些点到这些位置的中心点 现在 我通过找到最接近的一对 将它们组合起来并重复 直到将其减少到我的目标 旁注 实际上我通过排序来减少问题 lat lat long long 然后在每个点的两侧搜索 10 根据我的测试 总是
  • Swift 框架在 lldb 中返回“模糊使用”方法扩展

    我已升级到 Xcode 11 和 swift 5 并在通过框架提供方法扩展时遇到了问题 更具体地说 在一个结构如下的项目中 gt Main Project gt Framework created from sources in Main
  • Keras 1.0 支持 scipy 稀疏矩阵吗?

    我找不到关于 keras 是否支持 scipy 稀疏矩阵作为训练 测试向量的明确答案 我已阅读此链接 这似乎意味着它没有https www kaggle com c walmart recruiting trip type classifi
  • R闪亮滑块输入显示时间

    我有一个与 R Shiny 中的 sliderInput 相关的问题 在 sliderInput 中 该值是一个数字 一些示例显示该数字是 number 但是 如果我想将 sliderInput 的值显示为时间 例如 10 00 15 00
  • 如何循环匹配正则表达式的所有元素?

    案例如下 我想找到与正则表达式匹配的元素 targetText SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext 我在 javascript 中使用正则表达式 如下所示 reg n
  • Xcode 自动完成块内块(以及它们所在的块......)

    如何设置一个块属性 该属性将另一个块属性作为参数 以便自动完成功能为两个块提供所有必需的参数 为了进一步解释 我将演示自动完成功能如何仅适用于一个块属性 In AppDelegate h 为所有需要访问 block 属性的类创建一个引用 A