I have an NSSet of Strings, and I want to convert it into [String]. How do I do that?
4 Answers
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
5 Comments
noobprogrammer
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
Eric Aya
Works for me (screenshot). Maybe upgrade Xcode? I'm using 7b4.
Eric Aya
And here's the screenshot for the Xcode 6 version. :)
noobprogrammer
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"?
vacawama
@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.
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)
Comments
You could do something like this.
let set = //Whatever your set is
var array: [String] = []
for object in set {
array.append(object as! String)
}
1 Comment
Parv Bhasker
this ans made my day

