在旧工程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 }
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