I have an NSSet of Strings, and I want to convert it into [String]. How do I do that?
How to convert NSSet to [String] array?
Asked Answered
I would use map
:
let nss = NSSet(array: ["a", "b", "a", "c"])
let arr = nss.map({ String($0) }) // Swift 2
let arr = map(nss, { "\($0)" }) // Swift 1
swift 2 - says nsset doesn't have a map method and the second one forces me to do as! NSString - but ends up getting some dynamicCastObjCClassUnconditional. So neither of them work for whatever reason –
Ballflower
Works for me (screenshot). Maybe upgrade Xcode? I'm using 7b4. –
Octillion
And here's the screenshot for the Xcode 6 version. :) –
Octillion
Hey Eric! It works - only thing is I actually meant is for it to be an NSSet of "Tag"s with a "name" String field (instead of a NSSet of strings). How would I change the nss.map({ String($0) }) to work for this custom class "Tag"? –
Ballflower
@noobprogrammer, he answered your question and you used his solution in the followup question. Please accept this answer by clicking on the checkmark to turn it green. –
Birmingham
If you have a Set<String>
, you can use the Array constructor:
let set: Set<String> = // ...
let strings = Array(set)
Or if you have NSSet, there are a few different options:
let set: NSSet = // ...
let strings1 = set.allObjects as? [String] // or as!
let strings2 = Array(set as! Set<String>)
let strings3 = (set as? Set<String>).map(Array.init)
You could do something like this.
let set = //Whatever your set is
var array: [String] = []
for object in set {
array.append(object as! String)
}
this ans made my day –
Mistymisunderstand
let set = NSSet(array: ["a","b","c"])
let arr = set.allObjects as! [String]
© 2022 - 2024 — McMap. All rights reserved.