【发布时间】:2021-09-28 07:52:22
【问题描述】:
我有一个自定义协议说
protocol CustomProtocol {}
我有一个自定义结构说
struct CustomStruct: View, CustomProtocol
如何使 (CustomStruct, CustomStruct) 符合 CustomProtocol
我有一个具有 init 函数的自定义 ViewBuilder,
init<views>(@ViewBuilder content: @escaping () -> TupleView<Views>)
现在我只希望接受符合 CustomProtocol 的视图
例子:
struct CustomStruct: View {
var views: [AnyView]
init<Views: CustomProtocol>(@ViewBuilder content: @escaping () -> TupleView<Views>) {
self.views = content().getViews
}
我为 getViews 变量添加了元组视图的扩展:
extension TupleView {
var getViews: [AnyView] {
makeArray(from: value)
}
private struct GenericView {
let body: Any
var anyView: AnyView? {
AnyView(_fromValue: body)
}
}
private func makeArray<Tuple>(from tuple: Tuple) -> [AnyView] {
func convert(child: Mirror.Child) -> AnyView? {
withUnsafeBytes(of: child.value) { ptr -> AnyView? in
let binded = ptr.bindMemory(to: GenericView.self)
return binded.first?.anyView
}
}
let tupleMirror = Mirror(reflecting: tuple)
return tupleMirror.children.compactMap(convert)
}
}
【问题讨论】:
标签: swift swiftui swift-protocols