从 swift 调用 Objective-C typedef 块

2024-01-12

我正在尝试从 swift 调用一个方法。 该方法是用 Objective-C 编写的单例

头文件中的块:

typedef void(^VPersonResultBlock)(Person *person, NSError *error);

- (void)askForMe:(VPersonResultBlock)block;

这是该方法的实现。

- (void)askForMe:(VPersonResultBlock)block
{
if (_me) block(_me,nil);
else {
    [Person getMeWithBlock:^(PFObject *person, NSError *error) {
        if (!error) {
            _me = (Person *)person;
            block(_me,nil);
        }

        else if (error) {
            block(nil,error);
        }
        else {
            NSDictionary *userInfo = @{
                                       NSLocalizedDescriptionKey: NSLocalizedString(@"Operation was unsuccessful.", nil),
                                       NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The operation failed to retrieve the user.", nil),
                                       NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Check your network connection and try again", nil)
                                       };
            NSError *error = [[NSError alloc] initWithDomain:@"VisesAsyncErrorDomain" code:-10 userInfo:userInfo];
            block(nil,error);
        }
    }];
}
}

在 Objective-C 中,我可以调用它,它会自动完成而不会造成混淆。

[[VDataStore instance] askForMe:^(Person *person, NSError *error) {
    // do things with myself that aren't strange
}];

现在假设我想从 swift 调用相同的方法。桥接头已设置,并导入了头文件,但 swift 的期望令人困惑。

VDataStore.askForMe(VDataStore)

这是自动完成选项中显示的内容

(VPersonResultBlock!) -> Void askForMe(self: VDataStore)

我所希望的是自动完成为一个闭包,尽管它似乎正确地看到了所有信息,但它所期望的与 Objective-C 似乎理解的并不相符。

我如何从 swift 正确调用它?


直接将 ObjC 调用代码翻译为 Swift 是

VDataStore.instance().askForMe() {
    person, error in 
    // do things with myself that aren't strange
}

你的问题是askForMe是实例方法,但您正在从类对象访问VDataStore.askForMe。 Swift 会给你一个函数对象,它接受一个实例作为输入。

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

从 swift 调用 Objective-C typedef 块 的相关文章

  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • 使用 Objective-C 在 iPhone 应用程序中显示或隐藏 UIButton

    我在用UITextView编辑文本 我想用两个UIButtons编辑并保存 最初我想显示编辑UIButton 当用户单击编辑时我想显示保存UIButton 当内容成功保存后 我不想再显示保存按钮 我是一名 C 编码员 在 C 中我曾经这样做
  • 使用 Push Transition 效果更改 RootViewcontroller

    在我的iOS应用程序中 我需要更改应用程序之间窗口的rootviewController 因此 当我动态更改我的rootviewcontroller时 它会在更改之前轻拂视图 但我想要的是在更改rootviewcontroller时提供平滑
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • 如何在 RestKit 中为同一类提供两条发布路线

    由于我无法弄清楚如何为同一个类设置两个不同的 POST 资源路径 因此我尝试手动创建 RKObjectLoader 请求 但它似乎不断发送 GET 请求而不是 POST 即使我已将方法设置为邮政 这是我的代码 User user User
  • 使用隐藏的 SFSafariViewController 获取 Safari cookie

    我正在阅读以下关于从移动网页到本机 iOS 9 应用程序对用户进行身份验证的文章 并且想知道如何最好地实现类似于下面讨论的隐藏控制器的隐藏 safari 视图控制器 https library launchkit io how ios 9
  • 如何在我的 iOS 项目中添加和执行 .sql 文件?

    我找到了很多关于在 iOS 中使用 SQLite 数据库的教程 但没有找到任何直接引用 sql 文件的内容 谁能告诉我如何将现有的 SQL 数据库链接到我的应用程序 编辑 这是一个 MySQL 转储 我们有一个基于浏览器的抽认卡程序 现在我
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • Swift -boundingBox 导致 EXC_BAD_ACCESS (代码 = 1)

    我正在使用 SceneKit 来显示文本节点 这是我的代码 foo swift extension SCNNode func getNodeSize gt width Float height Float let min max bound
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 如何使用 ZBar 读取器的 scanCrop 属性?

    我正在使用 iPhone 的 ZBar SDK 来扫描条形码 我希望阅读器仅扫描特定的矩形而不是整个视图 为此需要将阅读器的 scanCrop 属性设置为所需的矩形 我很难理解必须设置的矩形参数 有人可以告诉我如果在纵向视图上它的坐标是 我
  • 更改 UITextField 辅助功能描述

    有没有办法将 UITextField 的辅助功能标签设置为 文本字段 之外的其他内容 因此 我不想将其称为 文本字段 而是将其命名为 代码验证字段 我的建议是不要试图在内置语音输出上智取系统 对于盲人用户来说 文本字段正在编辑 相当于 该项
  • Swift 如何设计 UIWebView 在 Story Board 中自动调整全屏大小

    我在 StoryBoard 中设计了一个 320x500 的 UIWebView 但是当在 Iphone 6 Plus 模拟器中运行时 我想要这个 webview 全屏或随设备屏幕缩放 如何在故事板中制作它 我在 ViewDidLoad 中
  • 维护 UISegmentedControl 中的选择

    我可以保持 UISegmentViewControl 段的选定状态吗 即 即使用户选择了另一个段 也可以保持一个段显示为选中状态 我似乎在任何地方都找不到任何可以做到这一点的东西 这是不可能开箱即用的 看如何才能选择 UISegmented
  • 具有多种自定义单元格类型的 RxSwift 表视图

    我想知道是否有任何代码示例RxSwift当我可以在一个表视图中使用多个自定义单元格时 例如 我有两个部分 第一部分有 10 个单元格 类型为CellWithImage标识符和第二部分有 10 个带有类型的单元格CellWithVideo标识
  • Swift 中 UIImages 的淡入淡出动画

    我有一组图像 我希望它们在登录屏幕的背景中淡出 我无法在 swift 中找到任何可以做到这一点的东西 有什么办法我可以做到吗 这是我当前的代码 override func viewDidLoad super viewDidLoad star
  • Parse - 使用 Swift 进行子类化?

    我正在尝试让标准子类与 swift 一起使用 桥接标头 h import
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐

  • 将数据库放入android项目中

    我在 stackoverflow 上读到了大约 5 个线程 但仍然不知道该怎么做 我已经有 sqlite 数据库 但我不知道将它放在我的 android studio 项目中的哪里 我想要随应用程序一起下载数据库 它并不假装是最好的方法 但
  • Node.js 全局变量

    我在这里问 Node js 需要继承吗 https stackoverflow com questions 5348685 node js require inheritance 有人告诉我 我可以通过省略变量来将变量设置为全局范围 这对我
  • 如何在黑莓中使BrowserField的背景透明

    我在用BrowserField的组成部分RIM BB 它现在显示白色背景 我想要制作一个透明背景 这样它就可以与经理的背景颜色相匹配 我曾尝试使用下面的代码 但这不起作用 BrowserField contentField new Brow
  • 为什么字符串类型的默认值是null而不是空字符串?

    测试我所有的琴弦是很烦人的null在我可以安全地应用像这样的方法之前ToUpper StartWith etc 如果默认值为string如果是空字符串 我就不必测试 而且我觉得它与其他值类型更加一致 例如int or double例如 此外
  • Ansible jenkins_plugin 模块返回“HTTP 错误 403:请求中未包含有效的 crumb”

    我使用 Ansible v 2 8 作为 Packer 模板背后的配置程序来为 Jenkins 主节点构建 AMI 对于以前的版本 剧本已成功通过 然而 从 Jenkins 版本 2 176 3 开始 jenkins plugin模块一直在
  • 为什么spring找不到Spring Cloud Stream创建的@Source bean通道?

    我正在尝试使用 Spring Cloud Stream 来发布和使用 Kafka 消息 我一直在研究文档这里关于访问绑定通道 http docs spring io spring cloud stream docs Chelsea SR2
  • React-dnd getDecolatedComponentInstance() 不是一个函数

    我目前正在 React 中构建文件上传和排序功能 我使用了以下示例 https gaearon github io react dnd examples chessboard tutorial app html https gaearon
  • 根据距离聚合 sf 点

    当点在指定距离内时 我想创建 SpatialPointsDataFrame 的所有变量的平均值 我有一个方法可以做到这一点 但这似乎是解决问题的愚蠢方法 任何使用整洁的现代语法来做到这一点的想法将不胜感激 首先 我有一个SpatialPoi
  • 如何将此 MySQL SELECT 查询转换为 DELETE 查询?

    我想从数据库中删除某些项目 我有以下查询 SELECT FROM sheets entries WHERE entries sheetID sheets id AND sheets clientID 13 这有效 并返回 2 个结果 现在我
  • 如何锁定尚不存在的 InnoDB 行?

    如何保证我可以搜索数据库中是否存在用户名 然后将该用户名作为新行插入数据库中 而在用户名之间没有任何拦截SELECT and INSERT声明 几乎就好像我锁定了不存在的行 我想用用户名锁定不存在的行 Foo 这样我现在就可以检查它是否存在
  • 结对编程、混合 IDE 环境?

    有人有过在混合 IDE 环境中进行结对编程的团队经验吗 我是 IntelliJ 的长期用户 其他人使用 Eclipse 您可能听说过 在我看来 结对编程涉及程序员之间大量传递键盘 但每次我拿到键盘时 我都会停下来 因为我不知道还能做什么 就
  • 使用 HTTP PUT 通过 Jquery 和 Rails 3 发送 JSON

    HTTP PUT 并不完全跨浏览器 因此 Rails 我使用的是 Rails 3 支持使用 POST 并传递 method查询参数这很棒 但是在发送 JSON 时似乎不起作用 Example ajax url window location
  • 如何在 Bokeh (Python) 中绘制水平条形图

    我有这个数据 data Cities Des Moines 80 0 Lubbock 300 0 Minneapolis 85 7 Orange County 80 0 Salt Lake City 81 8 San Diego 80 0
  • Visual Studio 设计器不显示嵌入字体

    我在 Visual Studio 2013 的 C WPF NET 4 0 应用程序 特别是 Open Sans 和 FontAwesome 中使用一些自定义字体 I have 将 FontAwesome otf 和 OpenSans Re
  • 杰克逊 2.0 与球衣 1.12

    有人设法将 Jackson 2 0 与 Jersey 1 12 一起使用吗 知道这一点将会非常有趣 我们必须在所有地方使用 Jackson 1 9 x 只是因为 jersey 与 Jackson 的耦合如此紧密 据我所知 甚至 jersey
  • 我的 App Engine 控制面板中的数据存储区管理页面为空白

    我在 appspot com 上的所有应用程序中的数据存储管理页面都是空白的 我已按照说明启用它们 并且没有收到任何错误消息 只是加载了空白页面 有人可以帮忙吗 如果您使用的是 Google Chrome 并通过多个 Gmail 帐户登录
  • 模拟本地网络的低速连接

    有时我想手动测试我的 Web 应用程序 调用 Web 服务或网站或 RIA 的桌面应用程序 以查看它们在低速互联网连接 例如 56 kbps 下的行为方式 是否可以通过网络模拟比真实速度更低的速度来实现 如果是 是否也可以模拟低质量连接 例
  • 使用苹果的 auriotouch 示例计算频率

    我正在开发一个需要捕获吉他声音频率的程序 我修改了 aurioTouch 示例 以使用幅度最高的频率来输出频率 它适用于高音 但在低音弦上非常不准确 我相信这是由于泛音造成的 我研究了如何解决这个问题的方法 例如倒谱分析 但我不知道如何在示
  • 是否可以在同一个 Django 项目中拥有单独的 SQLite 数据库?

    我正在考虑为 Django 项目上的某些应用程序创建一个单独的 SQLite 数据库 但是 如果可能的话 我不想使用直接 SQLite 访问 对这些数据库的 Django 风格 ORM 访问将是理想的选择 这可能吗 谢谢 是的 低级 API
  • 从 swift 调用 Objective-C typedef 块

    我正在尝试从 swift 调用一个方法 该方法是用 Objective C 编写的单例 头文件中的块 typedef void VPersonResultBlock Person person NSError error void askF