设置Swift和Objective-C互操作性

3.在此处添加要在swift类中使用的Objective-C类的导入头。 将头文件包含在Bridging头文件中后,就无需将其重新导入到任何Swift文件中。 可以在项目中的所有swift文件中访问它。

现在,您选择的Objective-C对象可用于您的快速班!! 做得好!!

使用Swift和Objective-C时要谨记的事情

Swift和Objective-C有一些根本的区别,在使用两种语言进行工作时,需要牢记一些非常重要的事情。 为了使从一种语言到另一种语言的过渡最顺畅,最好记住它们的独特功能。

Swift和Objective-C之间的区别

如果swift类中的方法或变量没有出现在Objective-C文件中,则可能是因为Objective-C不支持确定该方法或变量的特定功能。

以下是在Objective-C中不可用的Swift功能的简短列表:在swift中定义的元组,泛型,任何全局变量,结构,类型别名或枚举,以及顶级swift函数。

解决这个问题的一种方法是创建一个包装器类,该包装器类可以处理这些不可用的功能,并在与Objective-C类进行交谈时被调用。

子类限制

局限性之一是无法从子类快速分类。 Swift对象可以具有Objective-C类的子类,例如NSObject。 但是,快速类不能成为Objective-C类的基础类。

种类

幸运的是,objective-C类型和swift类型彼此之间具有很好的对应性,并且可以跨语言很好地进行翻译。

选装件

可选状态是Objective-C和Swift之间在功能上非常重要的区别。 当您从Objective-C将参数传递给Swift类时,Swift必须知道变量的可选状态。 在Swift中,任何事物都可以保持未定义状态,甚至可能为零。 由于Objective-C不满足此要求,因此传入的参数可能会自动后面跟一个!。 或爆炸符号,或其他更严重的问题和错误可能会发生。 理想情况下,您应该设置某种方式来检查要快速传递的每个变量的可选状态。

将属性传递给swift时,您可以采取的一种初步措施是在Objective-C类文件中从一开始就声明非null或可为null。

  @属性(非原子,强,非空)NSString * name; 

这使swift文件知道该变量在收到后不会为null。 作为捷径,您还可以指定整个文件为非空或可为空。 在文件的@interface之前添加以下行。

  NS_ASSUME_NONNULL_BEGIN 

然后在@end之后添加下一行。

  NS_ASSUME_NONNULL_END 

感谢您的阅读!

有用的链接和来源:

将Swift与Cocoa和Objective-C(Swift 3.1)结合使用:基本设置
描述Swift与Objective-C语言和Cocoa / Cocoa Touch框架的兼容性的各个方面。 developer.apple.com Swift和Objective-C:永远的好朋友?
我们很高兴在我们的SLUG聚会上欢迎Jonathan Blocksom。 经验丰富的行业资深人士,乔纳森(Jonathan)具有真正的… realm.io 将Swift与Cocoa和Objective-C(Swift 3.1)结合使用:与Objective-C API交互
描述Swift与Objective-C语言和Cocoa / Cocoa Touch框架的兼容性的各个方面。 developer.apple.com