Skip to content

Instantly share code, notes, and snippets.



Forked from algal/SwiftSet.swift
Last active Aug 13, 2018
What would you like to do?
struct MySet<KeyType : Hashable> : Sequence, ArrayLiteralConvertible
var dictionaryOfItems = Dictionary<KeyType,Bool>()
typealias GeneratorType = MapSequenceGenerator<Dictionary<KeyType, Bool>.GeneratorType, KeyType>
init() {}
init(array: KeyType[]) {
for item in array {
self.dictionaryOfItems.updateValue(true, forKey: item)
func addObject(item:KeyType) -> Void {
self.dictionaryOfItems.updateValue(true, forKey: item)
func containsObject(item:KeyType) -> Bool {
return self.dictionaryOfItems[item].getLogicValue()
func generate() -> GeneratorType {
return dictionaryOfItems.keys.generate()
static func convertFromArrayLiteral (elements: KeyType...) -> MySet<KeyType> {
return MySet (array: elements)
// the ArrayLiteralConvertible lets you do
let set : MySet<Int> = [1,2,3]

This comment has been minimized.

Copy link

@algal algal commented Jun 11, 2014

Cool. A clear improvement. I don't understand the reason for "Map" in MapSequenceGenerator, or how it relates to the DictionaryGenerator.

A little worrying how reifying all these abstractions into types is quickly producing Java-esque names for things, like three car pile-ups of abstract nouns, instead of the sanity of Cocoa. We'll see how it goes..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment