Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法更改Swift for循环中的核心数据属性_Ios_Swift_For Loop_Core Data - Fatal编程技术网

Ios 无法更改Swift for循环中的核心数据属性

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

在Swift(目前为2.3版)中,我通过fetch请求收到了一个
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奇怪的是,我可以访问属性来读取它们,而不是分配给它们。循环中还有其他代码读取属性。只有当我试图改变它们时,我才开始得到错误。斯威夫特的怪癖,可能是固定在这里没有力量展开。这里没有力量展开。