自从今天早些时候更新到Xcode Beta 6以来,我的应用程序将不再构建,它在Beta 5及更早版本中运行良好。
这是带有错误消息的文件中的代码,尽管我现在知道这并不一定意味着这实际上是错误所在。
import SwiftUI
struct JobView_Table : View {
@ObservedObject var jobList: JobDetailViewModel = JobDetailViewModel()
var body: some View {
NavigationView {
List {
ForEach($jobList.jobDetails) { job in
NavigationLink(destination: JobDetailHost(jobDetails: job)) { // ERROR: "Type of expression is ambiguous without more context"
JobView_List(jobDetails: job)
}
}
}
.navigationBarTitle(Text("My Jobs"))
.onAppear(perform: fetchData)
.onAppear(perform: {
print("Hello!")
})
}
}
private func fetchData() {
return(jobList.updateDetails())
}
}
包含数据的结构正确符合以下协议。
struct JobDetails: Codable, Identifiable, Equatable, Hashable {
...
...
}
这是向提供数据的类JobView_Table
。
import Foundation
import UIKit
import Combine
class JobDetailViewModel: ObservableObject, Identifiable {
@Published var jobDetails: [JobDetails] = []
func updateDetails() {
self.jobDetails = DataManager().fetchJobList()
}
}
最后是通过链接到的目标视图NavigationLink
。
struct JobDetailHost: View {
@Environment(\.editMode) var mode
@Binding var jobDetails: JobDetails
var body: some View {
VStack {
JobDetailView(jobDetails: jobDetails)
}
.navigationBarItems(trailing: EditButton())
}
}
我注意到其他一些人似乎也有类似的问题,例如下面列出的两个问题,但是目前这些问题的答案仍然无济于事。
编辑:
我试过实施Fabian的建议,这已消除了错误,但是列表中没有内容。
这是调整后的List
代码,可以成功编译,但是在运行应用程序时不会填充列表。
List {
ForEach(jobList.jobDetails.indexed(), id: \.1.id) { (index, job) in
NavigationLink(destination: JobDetailHost(jobDetails: self.$jobList.jobDetails[index])) {
Text(job.jobName)
}
}
}
以下代码不使用ForEach
和丢弃NavigationLink
,并且仍然无法正常工作。
List(jobList.jobDetails.indexed(), id: \.1.id) { (index, job) in
Text(job.jobName)
}
我将引用macOS Catalina 10.15 Beta
6发行说明
:
绑定结构对Collection协议的条件一致性已删除。(51624798)
如果您具有以下代码:
struct LandmarkList: View { @Binding var landmark: [Landmark] var body: some View { List(landmarks) { landmark in Toggle(landmark.value.name, isOn: landmark[\.isFavorite]) } } }
定义以下收集类型:
struct IndexedCollection<Base: RandomAccessCollection>:
RandomAccessCollection {
typealias Index = Base.Index
typealias Element = (index: Index, element: Base.Element)let base: Base var startIndex: Index { base.startIndex } var endIndex: Index { base.endIndex } func index(after i: Index) -> Index { base.index(after: i) } func index(before i: Index) -> Index { base.index(before: i) } func index(_ i: Index, offsetBy distance: Int) -> Index { base.index(i, offsetBy: distance) } subscript(position: Index) -> Element { (index: position, element: base[position]) } } extension RandomAccessCollection { func indexed() -> IndexedCollection<Self> { IndexedCollection(base: self) } }
然后,将代码更新为:
struct LandmarkList: View { @Binding var landmarks: [Landmark] var body: some View { // Does often give error on id: \.1.id List(landmarks.indexed(), id: \.1.id) { (index, landmark) in Toggle(landmark.name, isOn:
self.$landmarks[index].isFavorite)
}
}
}
您的代码也带有Binding<[JobDetails]>
with
$jobList.jobDetails
,但Binding<[JobDetails]>
不再符合Collection协议。
但是请注意上面的解决方案,\.1.id
由于编译器无法理解,我遇到了无法识别的情况,这\.1
是指元组IndexedCollection
定义中的第二个元素,但是我可能使用了错误的内容。可以重写它,但这使它起作用。
struct AnotherIndexedView_NeedsEnv: View {
@EnvironmentObject var modalManager: ModalManager
var body: some View {
ZStack {
SwiftUI.ForEach(modalManager.modals.indexed()) { m in
ModalView(currentModal: self.$modalManager.modals[m.index]).environmentObject(self.modalManager)
}
}.onAppear(perform: {self.modalManager.fetchContent()})
}
}
问题内容: 我对Swift编码还很陌生,所以如果这个错误是简单的答案,请原谅! 我不断收到一条错误消息,指出“表达式类型在没有更多上下文的情况下是模棱两可的”。 有什么建议? 谢谢! 问题答案: 您可以帮助编译器了解如下信息:
我试图从字典数组访问以下项目,我有两个问题(两者都是不同的方法)。字典数组初始化如下: 第一种方法: 无法运行,原因是(出现在for循环初始化行上): 第二种方法: 返回以下内容: 下面是我试图实现的伪代码等价物: 这几天我一直在琢磨这个问题,但我对swift及其习惯用法还不太了解,无法单独解决这个问题,任何帮助都将不胜感激(特别是如果我们能够找出如何使#1工作)。
问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con
问题内容: 我有一个Flask应用程序,当从flask调用它时,调用时不会出现问题。 我需要相同的方法在flask外部工作 我可以使用,但是我想在两种情况下(flask and command line)都可以使用相同的方法 问题答案: 你需要在应用程序上下文中呈现它。将应用程序导入后端代码,然后执行以下操作。
我不想再使用powermock了。因为junit5开始模拟静态类。因此,我试图摆脱powermock方法。 当我使用PowerMock时,我可以很容易地发现一个具有私有构造函数的类,然后我调用静态方法。 这是我代码的一部分(当我使用PowerMock时) 在我做了MessageValidationUtils.class的间谍对象后,我正在测试这个: 经过一些研究,我找不到任何与监视一个具有私有构造
我正在尝试将Cucumber集成到现有的Spring Boot项目中 当前项目是单个Maven模块 单元测试(不含Spring上下文)和集成测试(含Spring上下文)组合在同一个测试文件夹中。 我想做的是能够调整我的单元测试和集成测试。 但是一旦我添加了依赖项(为了能够在规范旁边运行Spring上下文),它就要求文件夹中的所有测试都用注释。 下面是我的测试套件,配置为获取测试规范。 是否可以将两