GithubHelp home page GithubHelp logo

swift-2048's Introduction

swift-2048

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.

Instructions

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.

Thoughts on Swift

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.)

Features Swift has that Objective-C lacks

(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 vs unowned, ...)
  • 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 ...)

Objective-C features with no direct native Swift idiom

(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

Features I wish Swift had

  • Better support for n-dimensional array initialization
  • Tuples usable as dictionary keys (although there are technical issues)
  • Python/MATLAB-style array slicing
  • Abstract methods

License

(c) 2014 Austin Zheng. Released under the terms of the MIT license.

2048 by Gabriele Cirulli (http://gabrielecirulli.com/). The original game can be found at http://gabrielecirulli.github.io/2048/, as can all relevant attributions. 2048 is inspired by an iOS game called "Threes", by Asher Vollmer.

swift-2048's People

Contributors

akshaybhatai avatar alco avatar austinzheng avatar balaji avatar buddax2 avatar iluuu1994 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.