How Swift standard types and classes were supposed to work

by gok2on 11/19/15, 6:47 PMwith 21 comments
by cballardon 11/19/15, 7:14 PM

I think that at lot of these pollute the global scope unnecessarily or incorrectly, and many of them are semantically incorrect. It's also a massive framework that doesn't address a specific concern. It would be better packaged as a collection of μframeworks.

Some specific issues:

> Easily access your ViewController on top of your view stack:

    let topOfMyViewStack = topMostVC
UIKit supports an arbitrary number of windows, so "your view stack" is not something that is definable.

> Easily access your screen width & height:

    print(screenWidth) // 375.0 on iPhone6
    print(screenHeight) // 667.0 on iPhone6
Which screen? iOS supports multiple screens - there's a reason that these things are scoped to instance properties of UIScreen.

> Easily run block of code:

    let myBlock = {
        print("lol")
    }
    runThisBlock(myBlock)
You can just call it directly with myBlock() - which the implementation presumably does.

> Easily convert between different types:

    var myDouble = myInt.toDouble
Double(myInt) isn't really hard, and the "easy" version is more characters.

> Easily access ViewController sizes:

View controllers do not have sizes - views do.

I don't want to rag on the author too much, but I'd also like to add something about the tagline "How Swift standard types and classes were supposed to work". This seems needlessly offensive and incorrect - in all likelihood, Chris Lattner is smarter (or at least more educated on the subject) than you - or me! There's no need to say that he's doing his work incorrectly. Instead, a tagline like "useful extensions for the Swift Standard Library, Foundation, and UIKit" wouldn't imply that the Swift team wasn't doing their job. Save that for complaining about the inability to define a Monad protocol.

by sandofskyon 11/19/15, 7:24 PM

This library provides so many anti-patterns. "topMostVC" is going to be the source of a ton of bugs.

As for aesthetics, this library will be adopted by a lot of people who don't understand Cocoa conventions. If I saw it part of a project, I'd consider it a red flag.

by jcizzleon 11/19/15, 7:24 PM

Some of this is just poor style/naming conventions, some of it is simply implemented incorrectly and the rest of it removes necessary distinctions from important functionality.

by masklinnon 11/19/15, 8:09 PM

The string indexing extensions are just terrible. There are good reasons why Swift does not provide these things out of the box even though objective-c did: http://oleb.net/blog/2014/07/swift-strings/#character-indice...

by sdegutison 11/19/15, 7:31 PM

Actually, a default implementation of `random` on `CollectionType` isn't such a bad idea.