Ios 无法在SwiftUI的当前上下文中推断闭包类型

Ios 无法在SwiftUI的当前上下文中推断闭包类型,ios,swiftui,Ios,Swiftui,我试图在SwiftUI中使用ForEach传递列表中的简单字符串数组 这是我的密码 import SwiftUI struct ContentView : View { var testArry:[String] = ["1", "a", "c"] var body: some View { List { ForEach(testArry) { obj in Text("test") } } } } #if DEBUG struct ContentVie

我试图在SwiftUI中使用ForEach传递列表中的简单字符串数组

这是我的密码

import SwiftUI

struct ContentView : View {
var testArry:[String] = ["1", "a", "c"]
var body: some View {
List {
    ForEach(testArry) { obj in
        Text("test")
    }
  }
}
}

#if DEBUG

struct ContentView_Previews : PreviewProvider {
 static var previews: some View {
   ContentView()
 }
}
#endif
错误:无法在当前上下文中推断闭包类型

您需要在数组上使用.identifiedby:\.self,以便SwiftUI将值本身用作标识符。因此,您应该使用以下命令更改代码

struct ContentView : View {
    var testArry:[String] = ["1", "a", "c"]
    var body: some View {
        List {
            ForEach(testArry.identified(by: \.self)) { obj in
                Text("test")
            }
        }
    }
}
您需要在数组上使用.identifiedby:\.self,以便SwiftUI将值本身用作标识符。因此,您应该使用以下命令更改代码

struct ContentView : View {
    var testArry:[String] = ["1", "a", "c"]
    var body: some View {
        List {
            ForEach(testArry.identified(by: \.self)) { obj in
                Text("test")
            }
        }
    }
}

或者,您可以使用.identifiedby:\.self,如下所示:

导入快捷键 结构ContentView:View{ var testArry:[字符串]=[1,a,c] var body:一些观点{ 名单{ ForEachtestArry.identifiedby:\.self{obj in 文本测试 } } } }
或者,您可以使用.identifiedby:\.self,如下所示:

导入快捷键 结构ContentView:View{ var testArry:[字符串]=[1,a,c] var body:一些观点{ 名单{ ForEachtestArry.identifiedby:\.self{obj in 文本测试 } } } }
尝试如下所示的一致性协议:-

struct ContentView: View {
    var testArry: [TestArray] = [TestArray(value: "1"), TestArray(value: "a"), TestArray(value: "c")]
    var body: some View {
        List {
            ForEach(testArry) { obj in
                Text("\(obj.value)")
            }
        }
    }
}
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
class TestArray: Identifiable {
    let value: String
    init(value: String) {
        self.value = value
    }
}

尝试如下所示的一致性协议:-

struct ContentView: View {
    var testArry: [TestArray] = [TestArray(value: "1"), TestArray(value: "a"), TestArray(value: "c")]
    var body: some View {
        List {
            ForEach(testArry) { obj in
                Text("\(obj.value)")
            }
        }
    }
}
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
class TestArray: Identifiable {
    let value: String
    init(value: String) {
        self.value = value
    }
}
这是正确的答案。ForEach方法签名已更改为Xcode 11 Beta 5,并且identifiedby:方法已被弃用:

公共结构ForEach,其中数据:RandomAccessCollection,ID:Hashable 自动完成显示为:

ForEachData,id:KeyPath,内容:Data.Element->content 因此,当使用Xcode 11 Beta 5时,您的代码将是:

导入快捷键 结构ContentView:View { var testArry:[字符串]=[1,a,c] var body:一些观点 { 列表 { //更新的ForEach方法,从Xcode 11 Beta 5开始 前庭遗嘱,id:\.self {obj in 文本测试 } } } } 这是正确的答案。ForEach方法签名已更改为Xcode 11 Beta 5,并且identifiedby:方法已被弃用:

公共结构ForEach,其中数据:RandomAccessCollection,ID:Hashable 自动完成显示为:

ForEachData,id:KeyPath,内容:Data.Element->content 因此,当使用Xcode 11 Beta 5时,您的代码将是:

导入快捷键 结构ContentView:View { var testArry:[字符串]=[1,a,c] var body:一些观点 { 列表 { //更新的ForEach方法,从Xcode 11 Beta 5开始 前庭遗嘱,id:\.self {obj in 文本测试 } } } }