我試圖在跨多種型別的擴展中重用一個功能,但我目前在使用這些型別時遇到了困難。我的代碼如下:
struct TitleStyle: ViewModifier {
func body(content: Content) -> some View {
content.font(.system(size: 34, weight: .bold))
}
}
protocol TextStyle {
associatedtype V: View
func textStyle<Style: ViewModifier>(_ style: Style) -> V
}
extension TextStyle where Self: View {
func textStyle<Style: ViewModifier>(_ style: Style) -> some View {
ModifiedContent(content: self, modifier: style)
}
}
extension Text: TextStyle {}
extension TextEditor: TextStyle {}
這將允許我創建一個可重用的組件,如下所示:
func ExpandingTextEditor<Style: ViewModifier>(text: Binding<String>, style: Style) -> some View {
ZStack {
TextEditor(text: text)
.textStyle(style)
Text(text.wrappedValue)
.textStyle(style)
.opacity(0)
.padding(.all, 8)
}
}
在 Stack Overflow 上查看與我類似的問題時,我已經設法達到了這個階段,但我得到了錯誤:
- “文本不符合協議 TextStyle”
- “TextEditor 不符合協議 TextStyle”
我錯過了什么?
uj5u.com熱心網友回復:
你只需要擴展View,比如
extension View {
func textStyle<Style: ViewModifier>(_ style: Style) -> some View {
ModifiedContent(content: self, modifier: style)
}
}
func ExpandingTextEditor<Style: ViewModifier>(text: Binding<String>, style: Style) -> some View {
ZStack {
TextEditor(text: text)
.textStyle(style)
Text(text.wrappedValue)
.textStyle(style)
.opacity(0)
.padding(.all, 8)
}
}
或者如果您想僅限于特定視圖:
protocol TextStyle {}
extension Text: TextStyle {}
extension TextEditor: TextStyle {}
extension View where Self: TextStyle {
func textStyle<Style: ViewModifier>(_ style: Style) -> some View {
ModifiedContent(content: self, modifier: style)
}
}
使用 Xcode 13.3 / iOS 15.4 測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/480203.html
上一篇:嵌套泛型impl
