如果我有一个与OrderProduct有一对多关系的Core Data Order实体(具有数量属性),而OrderProduct与Product有一对多关系,我如何从Order中获取Product ID数组?
我扩展了Order,并添加了一种获取OrderProducts数组的方法:
extension Order {
public var wrappedName : String {
name ?? "Unknown Order name"
}
public var orderProductArray: [OrderProduct] {
let set = orderProduct as? Set<OrderProduct> ?? []
return set.sorted {
$0.product?.wrappedName ?? "" < $1.product?.wrappedName ?? ""
}
}
}
这对于从订单中获取OrderProducts列表非常有效,但我想从订单中获取订单中的产品ID数组。我尝试将此添加到扩展产品中:
public var productIdArray: [String] {
var tempUuids: [String] = []
ForEach (orderProductArray) { op in
if let tempUuid = op.product?.id?.uuidString {
tempUuids.append(tempUuid)
}
}
return tempUuids
}
但我得到一个错误:
在对静态方法“buildExpression”的引用中没有精确匹配
1条答案
按热度按时间hvvq6cgz1#
ForEach()
用于SwiftUI。它允许您迭代一个随机集合(通常是Array
),并在每次迭代时创建一个视图。在这里,你不是在“SwiftUI”中,你只是想迭代那个数组。
所以你需要
forEach()
:->
顺便说一下,你也可以使用
compactMap()
来做这件事,根据你的代码:我将解释原因:你遍历数组,对于每个元素,你返回不同的东西,也就是你把每个元素“转换”成另一个元素。所以是
map()
好了,这几乎就是你的代码了,事实上,你跳过了一些值,所以你需要使用一个compactMap()
。它与map()
相同,除了当您返回nil时,它与跳过值相同。可以简化为:
然后进入:
但请保留当前Swift级别可以调试和修改的版本。