如何解决需要帮助以使NavigationLink在SwiftUI中工作
我目前正在通过www.hackingwithswift.com学习Swift和SwiftUI,目前正在进行编码练习,并且无法使我的ContentView使用NavigationLink链接到另一个SwiftUI视图。
如果我将目的地替换为一些随机文本,则可以使用。当我尝试将我的SwiftUI视图插入为目标时,代码将中断。我看了一个接一个的视频,但我不明白为什么我的代码无法正常工作。以下是我的ContentView和SwiftUI视图(名为:UserView.swift)的代码。我认为这与UserView_Previews有关,但我不确定。任何帮助/想法/建议将不胜感激!
ContentView代码
struct ContentView: View {
@State private var results = [User]()
var body: some View {
NavigationView {
List(results,id: \.id) {item in
NavigationLink(destination: UserView(results: results)) {
VStack(alignment: .leading) {
Text(item.name)
.font(.headline)
Text("Age: \(item.age)")
.foregroundColor(Color.red)
}
}
}
.onAppear(perform: loadData)
}
}
func loadData() {
guard let url = URL(string: "https://www.hackingwithswift.com/samples/friendface.json") else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data,response,error in
if let data = data {
DispatchQueue.main.async {
do {
self.results = try JSONDecoder().decode([User].self,from: data)
} catch {
print(error)
}
}
}
}.resume()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
UserView.swift
import SwiftUI
struct UserView: View {
let results: User
var body: some View {
ScrollView(.vertical) {
VStack {
Text(results.email)
.font(.headline)
Text(results.address)
}
}
}
}
struct UserView_Previews: PreviewProvider {
static let results = User(id: "123",isActive: true,name: "Cody",age: 34,company: "Some Company",email: "Some Email",address: "Some Address",about: "About Me",registered: "Yes",tags: ["1","2"],friends: [User.Friend(id: "456",name: "Some Friend Name")])
static var previews: some View {
UserView(results: results)
}
}
UserFile.swift这是要构建我的User结构
import Foundation
struct User: Codable,Identifiable {
let id: String
let isActive: Bool
let name: String
let age: Int
let company: String
let email: String
let address: String
let about: String
let registered: String
let tags: [String]
let friends: [Friend]
struct Friend: Codable {
let id: String
let name: String
}
}
解决方法
您的<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在List
的{{1}}上进行迭代,因此results
是[User]
,应将其传递给item
期望只有一个User
,而不是UserView()
的数组。
User
我认为这与UserView_Previews有关,但我不确定。
User
只是单元测试数据,它使您可以在Xcode的“预览”窗格中测试var body: some View {
NavigationView {
List(results,id: \.id) { item in
NavigationLink(destination: UserView(results: item)) { // here
VStack(alignment: .leading) {
Text(item.name)
.font(.headline)
Text("Age: \(item.age)")
.foregroundColor(Color.red)
}
}
}
.onAppear(perform: loadData)
}
}
User_Previews
。构建时不使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。