【问题标题】:Convert Set with specific Type to Array - Swift 2.3将具有特定类型的集合转换为数组 - Swift 2.3
【发布时间】:2017-06-10 07:59:28
【问题描述】:

使用Swift 2.3,我有一个用特定类型定义的Core Data Set,如下所示:

@NSManaged public var personEntities: Set<PersonEntity>?

我只是想将其转换为 PersonEntity 的 swift 2.3 Array - 简单吧?我尝试了以下方法,它们都会产生各种错误:

cell.people = Array(self.memory.personEntities)

(不能使用类型为 .. 的参数列表调用类型 .. 的初始化程序)

cell.people = self.memory.personEntities.flatMap({$0 as? PersonEntity})!

(无法将 Person Entity 类型的值赋给类型 [PersonEntity])

cell.people = self.memory.personEntities.flatMap({$0})

(Flatmap 产生 U,而不是上下文结果类型 _)

非常感谢任何帮助。

【问题讨论】:

  • 那是因为personEntities 是可选的。它必须是可选的吗?它很可能具有[] 的默认值,即为空的Set
  • @Eendje 假设 nil == [] 绝对不是要走的路。
  • @LukeSmith 你必须解开可选的Set&lt;PersonEntity&gt;? 才能获得Set&lt;PersonEntity&gt;。从那里您可以将其传递给 Array 初始化程序。
  • @Alexander 因此我问它是否应该是可选的。如果nil[] 无关紧要,他的情况会更容易。
  • @Eendje 您不应该根据编程的便利性在两者之间进行选择。它们有两种截然不同的语义

标签: arrays swift generics core-data set


【解决方案1】:

感谢通过 cmets 提供的贡献者,这是正确的答案:

cell.people = Array(self.memory.personEntities ?? [])

之前失败是因为self.memory.personEntitiesOptional。因此,通过添加?? [],它可能无法获得personEntities(如果它为零),而只是提供一个空数组[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2011-08-29
    相关资源
    最近更新 更多