Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通用参数';内容';无法推断SwiftUI_Swift_Swiftui - Fatal编程技术网

通用参数';内容';无法推断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)
    }
}