在旧工程ObjectiveC中使用SwiftUI开发

背景:

由于工程较旧,是ObjectiveC环境,想使用高效的SwiftUI.

由于ObjectiveC与SwiftUIView是完全两个不同的语言,需要通过UIHostingController来进行桥接。

操作步骤:

1、新建一个swiftUI文件,命名为SwiftUIView.swift 在里面显示一个最简单的文本框。

 1 import SwiftUI
 2 
 3 struct SwiftUIView: View {
 4     var text: String
 5    init(text:String){
 6         self.text = text
 7    }
 8 
 9     var body: some View {
10          Text(text)
11    }
12 }
13 
14 struct SwiftUIView_Previews:PreviewProvider{
15      static var previews:some View{
16             SwiftUIView(text:text)
17    }
18 }
View Code

2、此时系统会自动提示创建桥接文件。点击YES,文件名称为productName-Bridging-Header.h

3、创建一个工具类,用来处理从SwiftUIView ~》UIViewController的显示。 新建ViewControllerFactory.swift.在里面

import Foundation
import UIKit
import SwiftUI

class ViewControllerFactory:NSObject {
@objc func create(text:String)-> UIViewController {
let helloView = SwiftUIView(text:text)
let vc = UIHostingController(rootView:helloView)
return vc
} }

4、在ObjectiveC的MainViewController中展示swiftUIView界面

#import "productName-Swift.h" //重要,该文件为系统自动生成,是OC调用Swift的关键

...

ViewControllerFactory *mgr =[[ ViewControllerFactory alloc]init];
UIViewController *vc =[ mgr createWithText:@"test"];//Swift中的function在OC中的调用方式参数第一个会加上With
[self presentViewController:vc animated:YES completion:nil];
...

5、运行查看效果。注意:如果调用不到Swift中的方法则可以尝试多次build

原文地址:https://www.cnblogs.com/shycie/p/15796451.html