[swift-users] Reducing Array<OptionSet> to OptionSet
Jon Shier
jon at jonshier.com
Thu Nov 3 20:09:57 CDT 2016
Swifters:
I’m dealing with a JSON API where sets of options are returned as arrays of strings. Representing these as OptionSets seems ideal. I can decode the arrays of strings into an array of individual OptionSet values, but I’ve run into a dead end when trying generically reduce the array of OptionSets to a single OptionSet value. I’ve tried variety of ways of definition a Collection extension, even tried defining a global function, but I can’t seem to use the OptionSet sequence initializer or reduce itself (cannot invoke insert with argument of type (OptionSet) (or T)). Any guidance here?
Here’s what I’ve tried:
extension Collection where Iterator.Element == OptionSet {
func reduced() -> Iterator.Element {
return reduce(Iterator.Element()) {
var newResult = $0
newResult.insert($1)
return newResult
}
}
}
extension Collection where Iterator.Element == OptionSet {
func reduced<T: OptionSet>() -> T {
return reduce(T()) {
var newResult = $0
newResult.insert($1)
return newResult
}
}
}
extension Collection where Iterator.Element == OptionSet {
func reduced() -> Iterator.Element {
return Iterator.Element(self)
}
}
func reduced<T: OptionSet>(_ options: [T]) -> T {
return options.reduce(T()) {
var newResult = $0
newResult.insert($1)
return newResult
}
}
Jon Shier
More information about the swift-users
mailing list