首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SwiftUI-混合开发

SwiftUI-混合开发

作者头像
YungFan
发布2025-05-10 08:56:37
发布2025-05-10 08:56:37
19200
代码可运行
举报
文章被收录于专栏:学海无涯学海无涯
运行总次数:0
代码可运行

介绍

混合开发主要是指在 SwiftUI 中使用 UIKit(SwiftUI 中使用 UIView 与 UIViewController)与在 UIKit 中使用 SwiftUI。通过混合开发,开发者可以更灵活地利用 SwiftUI 与 UIKit 的各自优势,开发出功能强大且具有良好用户体验的应用程序。

UIKit in SwiftUI

Apple 针对 UIView 与 UIViewController 提供了两个 “表示器”,如下表所示。通过这两个表示器可以很容易地将它们转换成 SwiftUI 里面的 View。

UIKit

SwiftUI

UIView

UIViewRepresentable

UIViewController

UIViewControllerRepresentable

UIView in SwiftUI

UIViewRepresentable

  • 要使 UIView 在 SwiftUI 中可用,需要用UIViewRepresentable对 UIView 进行包装。
  • UIViewRepresentable中主要有 2 个方法需要实现。
    • makeUIView():创建View
    • updateUIView():根据条件与业务逻辑设置View的状态。

案例

使用 UIKit 中的UIActivityIndicatorView

代码语言:javascript
代码运行次数:0
运行
复制
import SwiftUI
import UIKit

struct ActivityIndicator: UIViewRepresentable {
    var isAnimating: Bool
    
    // 如下的2个方法都是与UIKit相关
    func makeUIView(context: Context) -> UIActivityIndicatorView {
        let v = UIActivityIndicatorView()
        v.color = .orange
        return v
    }
    
    func updateUIView(_ uiView: UIActivityIndicatorView, context: Context) {
        if isAnimating {
            uiView.startAnimating()
        } else {
            uiView.stopAnimating()
        }
    }
}

struct ContentView: View {    
    var isAnimating = true  
      
    var body: some View {
        ActivityIndicator(isAnimating: isAnimating)
    }
}

UIViewController in SwiftUI

UIViewControllerRepresentable

  • 要使 UIViewController 在 SwiftUI 中可用,需要用UIViewControllerRepresentable对 UIViewController 进行包装。
  • UIViewControllerRepresentable中主要有 2 个方法需要实现。
    • makeUIViewController():创建UIViewController
    • updateUIViewController():根据条件与业务逻辑设置UIViewController的状态。

案例

使用 UIKit 中的UINavigationController

代码语言:javascript
代码运行次数:0
运行
复制
import SwiftUI
import UIKit

struct NavigationViewController: UIViewControllerRepresentable {    
    var vc: UIViewController
    var title: String

    func makeUIViewController(context: Context) -> UINavigationController {       
        let nvc = UINavigationController(rootViewController: vc)  
        return nvc
    }

    func updateUIViewController(_ navigationController: UINavigationController, context: Context) {         
        navigationController.viewControllers[0].title = title        
    }
}


struct ContentView: View {    
    var body: some View {        
        NavigationViewController(vc: UIViewController(), title: "UIViewControllerRepresentable")
    }
}

SwiftUI in UIKit

UIKit 中使用 SwiftUI,需要通过UIHostingController包装 View,然后才能使用。

代码语言:javascript
代码运行次数:0
运行
复制
// 可以是复杂的ContentView
let vc = UIHostingController(rootView: ContentView())
代码语言:javascript
代码运行次数:0
运行
复制
// 也可以是简单的Text等其他View
let vc = UIHostingController(rootView: Text("Hello SwiftUI"))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • UIKit in SwiftUI
  • UIView in SwiftUI
    • UIViewRepresentable
    • 案例
  • UIViewController in SwiftUI
    • UIViewControllerRepresentable
    • 案例
  • SwiftUI in UIKit
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档