- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道有很多关于Type of expression is ambiguous without more context
编译时错误的问题,但我读了很多,似乎不明白为什么会出现我的错误。
首先,我有
protocol ExpensePeriod: AnyObject, Identifiable, Hashable {
associatedtype Period: ExpensePeriod
var type: Calendar.Component { get set }
var interval: DateInterval { get set }
var start: Date { get }
var end: Date { get }
var expenses: FetchRequest<Expense> { get }
static func array(from startDate: Date, to endDate: Date) -> [Period]
init(from date: Date)
}
广告然后:
extension ExpensePeriod {
var start: Date { interval.start }
var end: Date { interval.end }
var expenses: FetchRequest<Expense> {
FetchRequest<Expense>(
entity: Expense.entity(),
sortDescriptors: [NSSortDescriptor(key: "datetime", ascending: false)],
predicate: NSPredicate(
format: "datetime > %@ AND datetime < %@",
argumentArray: [start, end]
)
)
}
static func array(of timeComponent: Calendar.Component, from startDate: Date, to endDate: Date) -> [Self] {
var currentDate = startDate
var array = [Self(from: currentDate)]
while !Calendar.current.dateInterval(of: timeComponent, for: currentDate)!.contains(endDate) {
currentDate = Calendar.current.date(byAdding: timeComponent, value: 1, to: currentDate)!
array.append(Self(from: currentDate))
}
return array
}
static func == (lhs: Self, rhs: Self) -> Bool {
lhs.interval == rhs.interval
}
func hash(into hasher: inout Hasher) {
hasher.combine(interval)
}
}
然后:
final class ExpenseYear: ExpensePeriod {
typealias Period = ExpenseYear
var type: Calendar.Component
var interval: DateInterval
var year: Int { Calendar.current.component(.year, from: interval.start) }
var expenseMonths: [ExpenseMonth] {
return ExpenseMonth.array(from: start, to: end)
}
static func array(from startDate: Date, to endDate: Date) -> [ExpenseYear] {
array(of: .year, from: startDate, to: endDate)
}
init(from date: Date) {
self.type = .year
self.interval = Calendar.current.dateInterval(of: type, for: date)!
}
}
现在是 SwiftUI 主视图:
struct ListView: View {
@Environment(\.managedObjectContext) private var managedObjectContext
@FetchRequest(
entity: Expense.entity(),
sortDescriptors: [NSSortDescriptor(key: "datetime", ascending: false)]
) var expenses: FetchedResults<Expense>
@State private var showingNewExpenseSheet = false
@State private var showingPreferencesSheet = false
private var dateFormatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateFormat = "YYYY MMM"
return formatter
}
var body: some View {
NavigationView {
List {
ForEach(ExpenseYear.array(from: expenses.last!, to: expenses.first!)) { expenseYear in
ForEach(expenseYear.expenseMonths) { expenseMonth in
MonthlyListView(expenseMonth)
}
Text("\(0)")
}.onDelete(perform: deleteExpenseItem)
}
.navigationBarTitle("Expenses")
.navigationBarHidden(true)
}
}
func deleteExpenseItem(at offsets: IndexSet) {
for index in offsets {
let expense = expenses[index]
managedObjectContext.delete(expense)
}
do {
try managedObjectContext.save()
} catch {
print("Wasn't able to save after delete due to \(error)")
}
}
}
struct MonthlyListView: View {
@Environment(\.managedObjectContext) private var managedObjectContext
var expenseFetchRequest: FetchRequest<Expense>
var expenses: FetchedResults<Expense> {
expenseFetchRequest.wrappedValue
}
let expenseMonth: ExpenseMonth
init(_ month: ExpenseMonth) {
self.expenseMonth = month
self.expenseFetchRequest = month.expenses
}
var body: some View {
Section(header: Text("\(expenseMonth.month)")) {
ForEach(expenses) { expense in
ExpenseRowItemView(expense)
}
}
}
}
ExpenseRowItemView
仅显示各种日期时间/备注项目。
Type of expression is ambiguous without more context
似乎发生在 ForEach(ExpenseYear.array(from: expenses.last!, to: expenses.first!))
。我正在使用 Xcode 12 测试版。感谢您的帮助。
(如果你想知道为什么我要经历所有这些麻烦只是为了呈现一个费用列表:我曾经有一个函数遍历每个费用的 datetime
并构建一个嵌套结构SwiftUI 渲染(使用 Section 等)需要花费数年和数月的时间。但我认为这不是一种可扩展/高性能的方法,因为每次渲染 View 时都会调用此函数,从而触及 Core Data 中的每个条目,所以我想我会让每个月列表处理自己的 FetchRequest 和自己的日期边界,这也会使动态 View (例如“选择一个月以查看本月之前的交易列表”)更容易。请告诉我是否还有更好的方法。)
最佳答案
看来你不符合ExpensePeriod
在ExpenseYear
你不见了start
和 end
变量(很可能是错误的来源,但很难说)
确认后,如果错误仍然存在,我将在循环中替换 MonthlyListView
查看 Text
并且我会不断更换东西,直到找到错误的根源。
此错误通常在您缺少关键字或格式化循环时发生。大多数时候,这只是意味着编译器无法解释您编写的内容。
我会解决这个问题,但上面的代码缺少一些东西,无法通过复制和粘贴来运行它。
编辑:
所以你的问题出在forEach
因为如果你仔细观察,你的代码看起来像这样 ForEach(ExpenseYear.array(from: expenses.last!, to: expenses.first!))
然而,费用定义如下var expenses: FetchedResults<Expense>
该数组中的每一项都是 Expense
类型在你的ExpenseYear
排列你的标题看起来像这样 tatic func array(from startDate: Date, to endDate: Date) -> [ExpenseYear]
其中第一个和第二个参数的类型是 Date
但是您正在向他们传递一个 Expense
类型的项目. expenses.last!
返回 Expense
对象,那不是 Date
!所以要解决这个问题,你首先必须做这样的事情 expenses.last!.datetime!
所以把你的代码改成这样
ForEach(ExpenseYear.array(from: expenses.last!.datetime!, to: expenses.first!.datetime!), id: \.id) { expense in
应该可以解决你的问题。请记住以下几点
更改此代码以反射(reflect)您应用程序中的所有位置,我只在 1 个实例中更改了它,因为我已注释掉您的其余代码。
强制解包总是一个坏主意,所以我建议您正确处理日期,但要小心先解包。
此外,我知道您评论说我不需要实现 start
和 end
在ExpenseYear
但不幸的是,如果不实现它们我就无法编译,所以我不得不这样做。
或者,您可以更改 .array
接收 Expense
的协议(protocol)而不是 Date
然后处理如何从对象 Expense
返回数组所以你的协议(protocol)看起来像这样
static func array(from startExpense: Expense, to endExpense: Expense) -> [Period]
实现可以是这样的
static func array(from startExpense: Expense, to endExpense: Expense) -> [ExpenseYear] {
guard let startDate = startExpense.datetime, let endDate = endExpense.datetime else {
return []
}
return array(of: .year, from: startDate, to: endDate)
}
你已经注意防范 nil 日期,除了实现之外你不需要改变任何东西(老实说我更喜欢这种方法)
我知道要实现第二种方法,您必须更改设置协议(protocol)和其他一些东西的方式,所以您可以做的是传递一个可选的 Date
。给你的array
,像这样的东西 static func array(from startExpense: Date?, to endExpense: Date?) -> [Period]
然后守卫打开它们,否则返回空数组。但是你仍然有解包的问题.last
和 .first
您的费用 ForEach
循环。
祝大家好运!
关于swift - 表达式类型不明确,在 `ForEach` 中自定义类数组上没有更多上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62907643/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!