通用参数';内容';无法推断SwiftUI
我有如下的个人观点通用参数';内容';无法推断SwiftUI,swift,swiftui,Swift,Swiftui,我有如下的个人观点 struct PersonView<Content>: View where Content: View { let text: Text let detailText: Text var content: (() -> Content)? = nil var body: some View { VStack(alignment: .leading, spacing: 10) { t
struct PersonView<Content>: View where Content: View {
let text: Text
let detailText: Text
var content: (() -> Content)? = nil
var body: some View {
VStack(alignment: .leading, spacing: 10) {
text
detailText
content?()
}
}
}
为了让生活变得轻松,我对PersonView进行了扩展
extension PersonView {
init<Content: View>(person: Person, content: (() -> Content)? = nil) {
self.init(text: Text(person.name),
detailText: Text("\(person.age)"), content: content)
}
}
扩展PersonView{
init(person:person,content:(()->content)?=nil){
self.init(text:text(person.name),
detailText:Text(“\(person.age)”),content:content)
}
}
但这里我得到的错误是
“无法将“(()->Content)”类型的值转换为预期的参数类型“Optional”>”
我不确定哪里出错了您不应该在初始化器中声明额外的泛型参数
Content
。初始化器不应该是泛型的,而应该使用PersonView
中的Content
泛型参数:
extension PersonView {
init(person: Person, content: (() -> Content)? = nil) {
self.init(text: Text(person.name),
detailText: Text("\(person.age)"), content: content)
}
}
您声明的额外
内容
是与PersonView
中的内容
不同的通用参数,这就是为什么编译器说它不能转换类型。但是我想让我的代码更简单,并想手动在init方法中设置我的Content
,并尝试在没有Content:(()->Content)的情况下实现init
函数,我收到此错误,无法推断通用参数“Content”。就像我只想保留我的init
方法,比如init(person:person)
,并将根据person
属性在其中分配Content
。@Evana您试图分配给它什么类型的Content
?例如,如果它是一个文本
,则需要将扩展仅应用于PersonView,其中Content==Text
。无论如何,这似乎与这个问题无关。我建议你问一个新的。
extension PersonView {
init(person: Person, content: (() -> Content)? = nil) {
self.init(text: Text(person.name),
detailText: Text("\(person.age)"), content: content)
}
}