【问题标题】:How to work on two UIViewControllers one in swift and other in objective-c..? [duplicate]如何在两个 UIViewController 上工作,一个在 swift 中,另一个在 Objective-c 中。 [复制]
【发布时间】:2016-10-18 00:43:17
【问题描述】:

我正在将我在 Objective-C 中的应用程序重写为 Swift。 我想知道我是否可以在我的新应用程序中使用我以前的应用程序中的一些旧的UIViewControllers,而不必在 Swift 中重写它们。 有可能吗?

【问题讨论】:

  • 你应该可以混合它们。他们是UIViewController 毕竟是CocoaTouch 框架,它不依赖于使用的语言。

标签: ios objective-c iphone xcode swift


【解决方案1】:

是的,您可以使用桥接头。

当您将 Objective-C 文件导入 swift 项目(我们将项目称为 MyApp)时,它应该会询问您是否要创建桥接头 MyApp-Bridging-Header.h。如果它没有询问,您可以随时自己创建它,但如果您这样做,请确保将其包含在您项目的Build Settings 中的Swift Compiler - Code Generator -> Objective-C Bridging Header 下。在这个文件中,您可以为您的 Objective-C 文件编写导入,例如:

#import "MyUIViewController.h"

这会将它们导入到项目中,以便它们与其他 Swift 文件兼容。 然后在您的 swift 类中,您可以像引用任何其他 swift 类一样引用该 Objective-C 视图控制器,例如:

let myUIViewController = MyUIViewController()

【讨论】:

    【解决方案2】:

    是的,它会起作用的

    我还使用我之前的项目,我将旧的 Objective-C 代码导入到 Swift 项目中,制作 Bridge header 以便从 Swift 类访问那个 Objective-C UIViewController。您直接在 StoryBoard UIviewController 中分配您的 Objective-C UiViewcontroller 类,无需再次为 UIViewController 重写任何代码。如果您想访问 Swift 控制器类中的 Objective-C 类,您需要制作第一个 Bridge 头文件然后执行此操作。

     //In Swift Controller you can call your Objective-C Class 
     let myView = MyController() // This is Objective-C controller
     myView.updatemyProfile() // Can call function like Objective-C here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多