Ios 无法更改Swift for循环中的核心数据属性
在Swift(目前为2.3版)中,我通过fetch请求收到了一个Ios 无法更改Swift for循环中的核心数据属性,ios,swift,for-loop,core-data,Ios,Swift,For Loop,Core Data,在Swift(目前为2.3版)中,我通过fetch请求收到了一个NSManagedObject,其上有一个包含在典型核心数据集中的属性。我想遍历集合中的核心数据对象,并更改它们的属性,但我告诉我不能,因为它们是let常量。这是我的密码: for mediaEntity in aMemory.mediaEntities! { mediaEntity.remoteId = 0 } 这会导致错误无法分配给属性:mediaEntity是let常量 我试图更改的核心数据属性定义如下: exten
NSManagedObject
,其上有一个包含在典型核心数据集中的属性。我想遍历集合中的核心数据
对象,并更改它们的属性,但我告诉我不能,因为它们是let
常量。这是我的密码:
for mediaEntity in aMemory.mediaEntities! {
mediaEntity.remoteId = 0
}
这会导致错误无法分配给属性:mediaEntity是let常量
我试图更改的核心数据属性定义如下:
extension MemoryEntity {
@NSManaged public var mediaEntities: NSSet?
}
非常感谢您的帮助。由于您使用的是NSSet,因此您至少需要键入对象。我举的例子如下:
entity.activities?.forEach { ($0 as? ActivityEntity)?.id = UUID().uuidString }
更灵活的代码是:
entity.activities?.forEach {
guard let activity = $0 as? ActivityEntity else {
return // Incorrect type. Should never happen
}
activity.id = UUID().uuidString
}
因为您使用的是NSSet,所以至少需要对对象进行类型转换。我举的例子如下:
entity.activities?.forEach { ($0 as? ActivityEntity)?.id = UUID().uuidString }
更灵活的代码是:
entity.activities?.forEach {
guard let activity = $0 as? ActivityEntity else {
return // Incorrect type. Should never happen
}
activity.id = UUID().uuidString
}
尝试var entity=mediateentity,然后尝试entity.remoteId=0。确实尝试过。给出错误:`cannotassign to property:'entity'是不可变的ah wait-因此现在我可以通过将var强制转换为需要的类型MediaEntity来解决这个问题。真管用!谢谢你给我指出了正确的方向。你是怎么做到的?如果mediaEntities是NSSet,那么您至少需要一些类型转换?所以(mediaEntity为?MyEntityName)?.remoteId=0Yeh奇怪的是,我可以访问属性来读取它们,而不是分配给它们。循环中还有其他代码读取属性。只有当我试图改变它们时,我才开始得到错误。Swift的怪癖,可能在3Try-var-entity=mediateentity然后entity.remoteId=0中修复了。您尝试过了吗。给出错误:`cannotassign to property:'entity'是不可变的ah wait-因此现在我可以通过将var强制转换为需要的类型MediaEntity来解决这个问题。真管用!谢谢你给我指出了正确的方向。你是怎么做到的?如果mediaEntities是NSSet,那么您至少需要一些类型转换?所以(mediaEntity为?MyEntityName)?.remoteId=0Yeh奇怪的是,我可以访问属性来读取它们,而不是分配给它们。循环中还有其他代码读取属性。只有当我试图改变它们时,我才开始得到错误。斯威夫特的怪癖,可能是固定在这里没有力量展开。这里没有力量展开。