SwiftUI中如何创建兼容任意View的泛型PortraitViewController
解决方案
改造后的泛型实现
import SwiftUI import UIKit class PortraitViewController<Content: View>: UIHostingController<Content> { override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .portrait } }
实例化用法
你可以直接传入任意遵守View协议的SwiftUI视图,编译器会自动推导泛型类型:
// 传入原有MyView let vc = PortraitViewController(rootView: MyView()) // 支持任意其他SwiftUI视图 let textVC = PortraitViewController(rootView: Text("通用竖屏控制器")) let listVC = PortraitViewController(rootView: List { Text("列表项1") Text("列表项2") })
问题原因说明
你之前尝试直接把父类改为UIHostingController<View>无法运行,是因为Swift泛型要求传入具体类型,不能直接使用View协议本身作为泛型参数。通过给自定义类声明带约束的泛型参数Content: View,可以在实例化时自动匹配传入的视图类型,无需额外处理就能支持所有SwiftUI视图。
内容的提问来源于stack exchange,提问作者zumzum
相关产品推荐
相关产品推荐

