附加一个带有数组值的 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的主要内容,如果未能解决你的问题,请参考以下文章

使用带有附加参数的自定义规则验证 Laravel 中的数组

Swift - 如何将本地存储的对象数组(文件管理器)转换为较新的对象? (带有附加属性)

当标题是键和值的混合时,将数据从 json 附加到表

带有附加功能的 Alamofire 不会显示数据

附加函数在调整大小的数组中不起作用

带有附加数据的 OpenGL 索引缓冲区对象