我如何帮助结构推断闭包中的视图类型值,该闭包在 SwiftUI 中提供所需的类型?
How I can help struct infer View type values in a closure that feeds the needed type in SwiftUI?
下面的代码有效:
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.customViewModifier(modifier: { view in CustomModifier(content: { view } )} )
}
}
struct CustomModifier<Content: View>: View {
let content: () -> Content
var body: some View {
content()
.foregroundColor(.red)
}
}
extension View {
func customViewModifier<ContentModifier: View>(modifier: (Self) -> ContentModifier) -> some View {
return modifier(self)
}
}
我的目标 是能够使用下面的代码。目前,Xcode 无法帮助我修复错误。
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.customViewModifier(modifier: CustomModifier)
}
}
有没有办法让我的目标成为可能?
这是我解决问题的尝试:
extension View {
func customViewModifier2<ContentModifier: View>(modifier: (Self) -> ((Self) -> ContentModifier)) -> some View {
return modifier(self)
}
}
错误:
Type '(Self) -> ContentModifier' cannot conform to 'View'
最终的真正目标并不明确(因为使用基于 ViewModifier
的方法确实更好),但是如果你想使用类型作为参数,它可以像下面这样
*使用 Xcode 13.2 / iOS 15.2
编译
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.customViewModifier(modifier: CustomModifier.self) // << type !!
}
}
extension View {
func customViewModifier(modifier: CustomModifier<Self>.Type) -> some View {
return modifier.init(content: { self })
}
}
下面的代码有效:
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.customViewModifier(modifier: { view in CustomModifier(content: { view } )} )
}
}
struct CustomModifier<Content: View>: View {
let content: () -> Content
var body: some View {
content()
.foregroundColor(.red)
}
}
extension View {
func customViewModifier<ContentModifier: View>(modifier: (Self) -> ContentModifier) -> some View {
return modifier(self)
}
}
我的目标 是能够使用下面的代码。目前,Xcode 无法帮助我修复错误。
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.customViewModifier(modifier: CustomModifier)
}
}
有没有办法让我的目标成为可能?
这是我解决问题的尝试:
extension View {
func customViewModifier2<ContentModifier: View>(modifier: (Self) -> ((Self) -> ContentModifier)) -> some View {
return modifier(self)
}
}
错误:
Type '(Self) -> ContentModifier' cannot conform to 'View'
最终的真正目标并不明确(因为使用基于 ViewModifier
的方法确实更好),但是如果你想使用类型作为参数,它可以像下面这样
*使用 Xcode 13.2 / iOS 15.2
编译struct ContentView: View {
var body: some View {
Text("Hello, world!")
.customViewModifier(modifier: CustomModifier.self) // << type !!
}
}
extension View {
func customViewModifier(modifier: CustomModifier<Self>.Type) -> some View {
return modifier.init(content: { self })
}
}