附加一个带有数组值的 NSSet

Posted

技术标签:

【中文标题】附加一个带有数组值的 NSSet【英文标题】:append a NSSet with array values 【发布时间】:2021-04-09 08:37:29 【问题描述】:

如何将我的 HKObjectTypes 附加到 NSSet。 它总是返回空。有更好的方法吗???

     func getPermsFromOptions(_ options: NSArray) -> NSSet 
            var readPermSet = NSSet()
            var optionKey: String
            var val: HKObjectType
                
           for i in options
            optionKey = i as! String
            val = HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier(rawValue: optionKey))!

             readPermSet.adding(val)    
             print("set", readPermSet)           //always empty

                      
                  return readPermSet;
              

【问题讨论】:

var readPermSet = NSSet() => var readPermSet = NSMutabmeSet() 然后是readPermSet.add(val),但你为什么继续使用NSArrayNSSet?你不能改用 Swift SetArray 吗? 【参考方案1】:
readPermSet.adding(val)

添加不是一种变异方法,它返回一个添加了其他值的新集合

试试看:

var readPermSet: Set<HKObjectType> = []

readPermSet.insert(val)

【讨论】:

【参考方案2】:

您不能添加到NSSet。您可以添加到NSMutableSet

var readPermSet = NSMutableSet()
...
readPermSet.add(val)

adding 是 Swift 的一个方法,它返回一个包含所有相同元素以及新元素的新集合。您在这里忽略了它的返回值。

既然你在 Swift 中,为什么不使用Set&lt;HKObjectType&gt;[String]

func getPermsFromOptions(_ options: [String]) -> Set<HKObjectType> 
    var readPermSet = Set<HKObjectType>()
    for optionKey in options 
        let val = HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier(rawValue: optionKey))!
         readPermSet.insert(val)    
         print("set", readPermSet)
     
     return readPermSet;
 

【讨论】:

以上是关于附加一个带有数组值的 NSSet的主要内容,如果未能解决你的问题,请参考以下文章