A port of iOS-2048 to Apple's new Swift language. The game is present and working, but a number of auxiliary features haven't yet been implemented.
Like the original Objective-C version, swift-2048 does not rely upon SpriteKit. See the description for iOS-2048 for more information.
You will need the Xcode 6 Developer Preview to build and run the project. However, it should run under either iOS 7 or iOS 8 (on the simulator).
Tap the button to play the game. Swipe to move the tiles.
Swift is great. Pattern matching, tuples, and typeclasses are amazing. Programming in Swift feels much closer to programming in Scala than in Objective-C. Types are important again.
It's a little disappointing that Apple hasn't provided closure-based callbacks for UIKit controls. Selectors seem pretty hacky in Swift, but they do work.
Still have no idea how to make things private, public, or protected. In Objective-C you could hide internal details away in the .m file. In Swift, everything is exposed by default. Apparently this is something that will be added into the language before release; there will also be a flag to disable it (useful for exposing methods for unit testing).
Xcode is as unstable as always. The background compiler/code analyzer kept on crashing and restarting itself. Xcode was functional enough to allow the project to be brought to some state of completion. The debugger is horribly broken though. (Note that Xcode 6 DP is obviously beta software.)
(Not comprehensive)
- Tuples
- Tagged enums (similar to Scala typeclasses)
- Primitive types treated like objects (actually structs) - extensions can declare new methods upon
Int
, for example - Enums and structs that support functions and constructors
override
keyword to explicitly denote a method overriding a superclass implementation- C++ style function overloading
- Optional function arguments with default values
- Nested functions
- Pattern matching (match with arbitrary conditionals on values, ranges, tuple structure, enums, or types)
- Generics (type reification, not type erasure)
- Typed containers
- Safe typecasting
- Optionals (and optional chaining, implicitly unwrapped optionals,
weak
vsunowned
, ...) - Overflow-safe arithmetic
@auto_closure
attribute, allowing for a very basic form of pass-by-name (as opposed to pass-by-value) function arguments@final
attribute, to prevent overriding- Other attributes, which have a purpose similar to Java annotations or Python decorators
- Type properties (analogous to class methods; must be computed for classes, but can be stored for enums and structs)
- Syntactical sugar for function currying
- Operator overloading
- Custom operators
- Arbitrary behavior for subscripts
- REPL
- Multiple forms of closure literal convenience syntax
- Capture lists in closure declarations, to avoid retain cycles when using closures
- Native range operators and limited array slicing (
..
and...
)
(AFAIK; some of these might be available through interop)
- Method swizzling
- Key-Value Observing (KVO)
- Adding or modifying methods and classes at runtime
- Invocations
- Message proxying
- Selectors
- Better support for n-dimensional array initialization
- Tuples usable as dictionary keys (although there are technical issues)
- Python/MATLAB-style array slicing
- Abstract methods
(c) 2014 Austin Zheng. Released under the terms of the MIT license.
2048 by Gabriele Cirulli (https://gabrielecirulli.com/). The original game can be found at https://gabrielecirulli.github.io/2048/, as can all relevant attributions. 2048 is inspired by an iOS game called "Threes", by Asher Vollmer.