![](/img/trans.png)
[英]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.