Swift’s CollectionOfOne
The cases where using
CollectionOfOneis the best approach possible is when you are forced to operate onCollections. In the Standard Library for example,CollectionOfOneis used to insert elements in specific positions of anArray:public mutating func insert(_ newElement: __owned Element, at i: Int) { _checkIndex(i) self.replaceSubrange(i..<i, with: CollectionOfOne(newElement)) }Because
replaceSubrangereplaces aCollectionwith another one, cases where the replacement is only a single element can greatly benefit from usingCollectionOfOne.
1 Comment RSS · Twitter
Micro optimizations are always fun to read about (and code up). Objective-C / Foundation has had these kinds of specialized collections for a very long time. If you create an NSArray with a single element you actually get back an instance of __NSSingleObjectArrayI through the magic of class clustering.
Personally I'd hate to write code that directly references specialized classes like CollectionOfOne in all but the most dire of situations– certainly not just to avoid typing an append() call! But maybe Swift inlining can squeeze out better performance than Objective-C if you directly use things like CollectionOfOne? Still, I'd prefer that the compiler or framework transparently swap in these optimized classes.