我有一個帶有這個簽名的函式(我認為它的功能非常簡單),實作對我們來說并不重要:
extension View {
func border(edge: Edge, color: Color, width: CGFloat = 1, cornerRadius: CGFloat = 0) -> some View
}
然后我想擴展 的功能View,并添加一個額外的函式來呼叫前一個函式:
extension View {
func border(edges: [Edge], color: Color, width: CGFloat = 1, cornerRadius: CGFloat = 0) -> some View
}
但我的第一個想法沒有奏效。在 UIKit 中不會有問題,但在這里我無法弄清楚如何在單個函式中應用多個(可變數量)修飾符。
我試過這個:
extension View {
func border(edges: [Edge], color: Color, width: CGFloat = 1, cornerRadius: CGFloat = 0) -> some View {
var view = self
edges.forEach { edge in
view = view.border(edge: edge, color: color, width: width, cornerRadius: cornerRadius)
}
return view
}
}
它向我顯示了 2 個錯誤:
無法將“some View”型別的值分配給“Self”型別
實體方法'border(edges:color:width:cornerRadius:)'的回傳型別要求'Self'符合'View'
我理解錯誤,但我不能說讓view變數為 a some View(var view: View = self無法編譯)。我如何(用什么語法/想法)解決這個問題?
編輯:這是一個完整的代碼,它顯示了問題:
extension SwiftUI.View {
// not completed implementation, doesn't matter
public func border(edge: Edge, color: SwiftUI.Color, width: CGFloat = 1, cornerRadius: CGFloat = 0) -> some SwiftUI.View {
self
}
public func border(edges: [Edge], color: SwiftUI.Color, width: CGFloat = 1, cornerRadius: CGFloat = 0) -> some View {
var view: SwiftUI.View = self
edges.forEach { edge in
view = view.border(edge: edge, color: color, width: width, cornerRadius: cornerRadius)
}
return view
}
}
uj5u.com熱心網友回復:
我會以相反的順序解決這個任務 - 陣列的通用實作和一個元素作為陣列的單一用途,例如:
extension SwiftUI.View {
public func border(edge: Edge, color: SwiftUI.Color, width: CGFloat = 1, cornerRadius: CGFloat = 0) -> some SwiftUI.View {
self.border(edges: [edge], color: color, width: width, cornerRadius: cornerRadius)
}
public func border(edges: [Edge], color: SwiftUI.Color, width: CGFloat = 1, cornerRadius: CGFloat = 0) -> some View {
self // generic implementation here
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372684.html
