How to convert NSSet to [String] array?
Asked Answered
B

4

7

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

Ballflower answered 27/7, 2015 at 20:8 Comment(0)
O
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

Octillion answered 27/7, 2015 at 20:12 Comment(5)
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 reasonBallflower
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
F
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)
Firstclass answered 27/7, 2015 at 20:22 Comment(0)
L
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)
}
Labannah answered 27/7, 2015 at 20:16 Comment(1)
this ans made my dayMistymisunderstand
D
2
let set = NSSet(array: ["a","b","c"])
let arr = set.allObjects as! [String]
Duppy answered 27/7, 2015 at 20:21 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.