lin*_*ram 5 generics swift swift-protocols swiftui viewbuilder
我正在尝试使用 SwiftUI@ViewBuilder来允许我的包的用户动态指定视图的正文内容。但是,我试图将可用作输入的可能视图限制为我实现的几个默认视图(出于简化目的)。
这是一个例子:
public protocol PopupBodyView: View { } // every one of my default views conforms to this protocol
func generateChildView(@ViewBuilder items: () -> PopupBodyView)
-> some PopupBodyView {
return menuItems()
}
Run Code Online (Sandbox Code Playgroud)
如果我现在调用generateChildView,我可以正确指定协议类型的一种PopupBodyView视图- 但是,如果我在结果生成器主体中指定多个视图,则会收到以下错误:
Instance method 'contextMenu(items:)' requires that 'TupleView<(Text, Text)>' conform to 'PopupBodyView'
extension Text: PopupBodyView { } // add protocol conformance
contextMenu {
Text("Test")
Text("Test") // Instance method 'contextMenu(items:)' requires that 'TupleView<(Text, Text)>' conform to 'PopupBodyView'
}
Run Code Online (Sandbox Code Playgroud)
我现在如何调整默认值@ViewBuilder以仅接受符合我的自定义PopupBodyContent类型的视图?我基本上只想限制视图生成器接受的可能输入集。
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |