[英]Swift Value of protocol type 'XXX' cannot conform to 'Identifiable'; only struct/enum/class types can conform to protocols
[英]Value of protocol type '*' cannot conform to '*'; only struct/enum/class types can conform to protocols
我在尝试这个时遇到了上述错误:
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)
我该如何解决? 它不应该解决具体类型吗?
谢谢你的帮助。
您遇到了协议不符合自身的问题。 通过使applyStyle
非泛型可以轻松解决您的问题,因为Style
可以用作具体类型。
extension View {
public func applyStyle(_ style: Style) {
// USe the style here
}
}
由于 Preset 成员样式是 Style,而不是任何具体类型,因此您不需要 applyStyle 是通用的,您可以简单地说:
public func applyStyle(_ style: Style)
尝试
public protocol Style {}
struct StyleA: Style {}
struct StyleB: Style {}
struct StyleC: Style {}
struct Preset: Identifiable {
let id: UUID = UUID()
let title: String
let style: Style
}
extension View {
public func applyStyle(_ style: Style){
// USe the style here
}
}
// Initializg the data
let mockedData: [Preset] = [
.init(title: "Title A", style: StyleA()),
.init(title: "Title A", style: StyleB()),
.init(title: "Title A", style: StyleC()),
]
myView.applyStyle(mockedData.first!.style)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.