【发布时间】:2021-02-15 16:02:59
【问题描述】:
我在尝试这个时遇到了上述错误:
protocol Style {}
struct StyleA: Style {}
struct StyleA: Style {}
struct StyleA: Style {}
struct Preset: Identifiable {
let id: UUID = UUID()
let title: String
let style: Style
}
extension View {
public func applyStyle<S>(_ style: S) where S : Style {
// USe the style here
}
}
// Initializg the data
static let mockedData: [Preset] = [
.init(title: "Title A", style: StyleA()),
.init(title: "Title A", style: StyleB()),
.init(title: "Title A", style: StyleC()),
]
// This line gives the error
myView.applyStyle(mockedData.first!.style)
我该如何解决?它不应该解决具体类型吗?
感谢您的帮助。
【问题讨论】:
-
那是因为在 swift 协议中不会对自己进行确认。阅读:stackoverflow.com/questions/33112559/…
-
一个问题是你必须公开“协议样式”(因为你的函数是公开的
-
我猜,如果您在视图主体内使用 applyStyle ...那么此函数不会返回视图,所以这也是一个函数...请添加可重现的代码。
标签: swift swiftui swift-protocols