Apple于2014年6月推出了名为“Swift”的新母语,用于为iPhone、iPod、Apple Watch和其他苹果设备创建应用程序。Apple承诺它比Objective-C更快更简单。在本文中,我们将讨论如何将用Objective-C语言编写的旧版iOS应用程序转换为Swift,而无需从头开始重写所有代码。




ios 传文件 ios传文件到swtich_桥接


第1步:创建Swift文件

第一步很简单,就像在Objective-C应用程序中创建Swift文件一样简单。要创建Swift文件,请转到Xcode中的New File菜单,然后选择iOS source,然后从iOS Source菜单中选择Swift文件。点击下一步按钮。写下文件名,然后单击“创建”按钮。


ios 传文件 ios传文件到swtich_桥接_02


现在您将看到Xcode中弹出桥接标题,Xcode自动创建一个名为“bridging header”的文件和后台的另一个文件。


ios 传文件 ios传文件到swtich_iOS_03


bridging header文件允许您的项目与Objective-C类和Swift类进行通信。因此,项目配置为在混合模式下工作,其中代码可以作为Objective-C文件或Swift文件存在。


ios 传文件 ios传文件到swtich_应用程序_04


第2步:将所有头文件导入桥接文件

在设置了桥接文件之后,我们将把我们想要在Swift中使用的Objective C类中的所有项目头文件移动到这个桥接文件中。


ios 传文件 ios传文件到swtich_iOS_05


这个桥接文件允许我们在Swift类中创建Objective-C对象。在这个阶段,我们可以在Swift中创建Objective-C类的对象,但是,如果我们尝试在Objective-C类中创建Swift类对象,它将显示错误。为什么?


ios 传文件 ios传文件到swtich_应用程序_06


第3步:在Xcode中导入后台Swift FileGenerated 以允许Objective-C中的Swift对象

桥接文件允许将Objective-C类导入到Swift类中,但不允许在Objective-C类中创建Swift类对象。要解决这个问题,我们将需要在步骤1中创建Swift文件时由Xcode生成的后台文件。我们需要将隐藏的(Xcode生成的后台文件)Swift文件导入到Objective-C类中以在Objective中创建Swift对象-C。该文件的名称将使用以下命名模式:“NameOfTheProject-swift.h”。在示例中,我的项目名称是“Guilder”,因此Xcode生成的文件名是“Guilder-swift.h”,看下面给出的截图。


ios 传文件 ios传文件到swtich_应用程序_07


让我们总结一下这三步过程:

  1. 在Objective C应用程序中创建Swift文件时,需要单击“接受”以创建桥接文件。
  2. 将所需的Objective-C头文件放入您创建的桥接文件中,以便在Swift中访问这些类。
  3. 在要访问Objective-C类的Swift类中,您将导入隐藏的Xcode生成的文件。


ios 传文件 ios传文件到swtich_iOS_08


有时项目的源代码很多,需要花费大量时间将Objective-C中编写的每个文件更改为Swift,从而使从头开始重写整个项目变得更加容易。在这种情况下,您可以使用在线转换工具转换Objective-C Swift,例如Swiftify。使用这些工具转换应用程序后,您可能仍会看到一些错误和语法错误,例如:


ios 传文件 ios传文件到swtich_应用程序_09


  1. 变量的双重定义。
  2. 错误的可选和功能签名
  3. Swift版本问题
  4. Xcode建议修复
  5. 空值检查

但是,这些问题可以解决,工具可以节省大量的时间和人力。例如,要解决变量问题的双重定义,您需要删除重复的声明。另一个例子是如何解决选项问题,使用if..else或let guard语句,而不是解包变量,这是因为展开容易出错。


ios 传文件 ios传文件到swtich_应用程序_10


总而言之,桥接机制以及由XCode生成的隐藏Swift文件为Objective-C和Swift类提供了一种相互通信并消耗彼此服务的方法。因此,我们可以在Swift中创建包装类,并使用Objective-C类来提供相同的功能而无需重写任何内容。