当前位置: 首页 > 面试题库 >

iOS中块(Objective-C)和闭包(Swift)之间的区别

甘明朗
2023-03-14
问题内容

在教程中,他们写到在功能上是相同的,即使闭包比阻塞更容易,并且避免了块和内存管理的复杂性,我看过很多教程,但是除了这些,我没有理解swift的“
closure”和Objective-C“块”。


问题答案:

摘录自:Apple Inc.“将Swift与Cocoa和Objective-C结合使用。” iBooks:

“ Swift闭包和Objective-C块是兼容的,因此您可以将Swift闭包传递给需要块的Objective-
C方法。Swift闭包和函数具有相同的类型,因此您甚至可以传递Swift函数的名称。

闭包与块具有相似的捕获语义,但是在一个关键方面有所不同:变量是可变的,而不是复制的。换句话说,Objective-
C中__block的行为是Swift中变量的默认行为。”



 类似资料:
  • 问题内容: 我知道Java,现在正在学习Objective-C。Java接口和Objective-C协议之间到底有什么区别? 问题答案: 首先,从Java的一位创建者那里对该主题进行了一些历史性的展望。接下来,维基百科在Objective- C协议中 提供了适度有用的部分。特别要了解的是,Objective- C支持 正式协议 (使用关键字明确声明,相当于Java接口)和 非正式协议 (仅一个或多

  • 问题内容: 我只是在阅读一些Java书籍并制作一些小程序进行练习,我创建了一个小代码来获取有关所输入路径的信息,该代码为: 现在在输入对话框中,当我输入时,结果是,但是当我输入C:/时,它将显示C中目录和文件的完整列表。 奇怪的是,D驱动器和其他驱动器不会发生这种情况(即D:/和D:的结果是相同的),这是怎么回事? 更新 使用C#在WPF中也会发生同样的情况! 问题答案: 表示“驱动器上当前选择的

  • 问题内容: 在 Swift 4.1中 似乎已弃用。但是在 Swift 4.1中 有一个新方法正在做同样的事情?有了它,您可以变换集合中的每个对象,然后删除所有为零的项目。 像flatMap一样 像compactMap 在做同样的事情。 这两种方法有什么区别?苹果为何决定重命名该方法? 问题答案: Swift标准库为函数定义了3个重载: 可以通过两种方式滥用最后一个重载函数: 考虑以下struct和

  • 问题内容: 我在新的Swift项目中使用Objective-C Firebase框架时遇到麻烦。我主要来自C#背景,因此Swift闭合语法尚不清楚。 这是在f为Firebase对象的情况下在Objective-C中代码的工作方式 XCode auto建议使用这种语法,而我还没有找到可行的解决方案。 我想像Objective-C示例一样将FDataSnapshot数据分配给一个变量。谢谢 问题答案:

  • 本文向大家介绍在Objective-C和Swift之间进行细粒度的互操作,包括了在Objective-C和Swift之间进行细粒度的互操作的使用技巧和注意事项,需要的朋友参考一下 示例 将API标记为时NS_REFINED_FOR_SWIFT,将其__导入Swift时将以两个下划线()作为前缀: 生成的界面如下所示: 现在,您可以使用更“ Swifty”扩展名替换API。在这种情况下,我们可以使用

  • 问题内容: 考虑此函数,该函数采用通用参数,并根据谓词过滤数组。这与Swift提供的功能相同。 这有什么不同 即使在后面的示例中,我们也无法达到泛型的意义吗? 问题答案: 泛型是类型安全的,这意味着如果您将字符串作为泛型传递并尝试将其用作整数,则编译器会抱怨并且您将无法编译您的(很好)。(发生这种情况是因为Swift使用的是 Static类型 ,并且能够给您一个 编译器 错误 ) 如果使用AnyO