如何在 Swift 中将 NSSet 转换为 NSMutableSet

Posted

技术标签:

【中文标题】如何在 Swift 中将 NSSet 转换为 NSMutableSet【英文标题】:How cast a NSSet to NSMutableSet in Swift 【发布时间】:2016-06-21 20:44:45 【问题描述】:

我在我的应用程序中使用 Core Data,并且正在处理两个实体之间的多对多关系。 我的目标是让用户通过使用 tableview 并让用户选择单元格来选择一个实体中的哪一个将与另一个实体相关。

创建实体的类时,“列表”设置为 NSSet 类型,这是有道理的,因为不需要对其进行排序,而且我不希望其中的任何其他实体超过一个。

当我想将项目添加到 NSSet 时,我的问题就出现了,据我所知,如果不使用 NSMutableSet,我就无法做到这一点。然后我获得addObjectremoveObject。 除了我初始化 NSMutableSet 以拥有“列表”NSSet 当前拥有的所有内容的部分之外,我可以让一切正常工作。我尝试过的一切要么告诉我它总是会失败并且不会构建,要么最终会意外返回 nil 并出现错误。

那么有没有办法正确更改 NSSet 的内容,或者至少将 NSSet 转换为 NSMutableSet,然后当我完成后,将该 NSMutableSet 转换回 NSSet?

如有必要,我可以添加一些代码,但我认为我解释得很好。 让我知道,我会添加您需要的任何详细信息。

提前谢谢你。

【问题讨论】:

NSManagedObject 有一个方法mutableSetValueForKey: 【参考方案1】:

只需创建一个可变副本:

var set = NSSet(objects: "One", "Two", "Three")
let mutableSet = set.mutableCopy() as! NSMutableSet
mutableSet.addObject("Four")
set = mutableSet

【讨论】:

这个答案不适合核心数据 好的,抱歉。 “那么有没有办法正确更改 NSSet 的内容,或者至少将 NSSet 转换为 NSMutableSet,然后当我完成后,将该 NSMutableSet 转换回 NSSet?”在我看来,在转换类型时存在一个普遍的问题...... 伙计,我知道就这么简单。非常感谢。它似乎工作! 好吧@Wain...似乎这就是他所期望的答案...:) @JasonBrady:很高兴我能帮上忙。 :)【参考方案2】:

mutableCopy()

在您的NSSet 上致电mutableCopy()

let x = NSSet()
let y = x.mutableCopy() //returns NSMutableSet

【讨论】:

以上是关于如何在 Swift 中将 NSSet 转换为 NSMutableSet的主要内容,如果未能解决你的问题,请参考以下文章

在 Python Pandas DataFrame 中将 timedelta64[ns] 列转换为秒

如何在 Swift 中将 Int 转换为字符

如何在 Swift 中将 NSDateComponents 转换为 DateComponents

如何在 Swift 中将 CMSampleBuffer 转换为数据?

如何在 Swift 中将 Floats 的 ContiguousArray 转换为字节数组?

如何在swift中将字符索引从layoutManager转换为String scale