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

  • 相关阅读:
    LeetCode-20.Valid Parentheses
    LeetCode-2. Add Two Numbers
    LeetCode-1. Two Sum
    LeetCode Top100 Liked Questions
    位运算
    sublime中文乱码解决办法
    jQuery 参考手册
    jQuery 参考手册
    jQuery 参考手册
    《锋利的Jquery第二版》读书笔记 第三章
  • 原文地址:https://www.cnblogs.com/shycie/p/15796451.html
Copyright © 2020-2023  润新知