7

I have an NSSet of Strings, and I want to convert it into [String]. How do I do that?

4 Answers 4

13

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

Swift 1

Sign up to request clarification or add additional context in comments.

5 Comments

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
Works for me (screenshot). Maybe upgrade Xcode? I'm using 7b4.
And here's the screenshot for the Xcode 6 version. :)
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"?
@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.
9

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

2

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

this ans made my day
2
let set = NSSet(array: ["a","b","c"])
let arr = set.allObjects as! [String]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.