用Swift写个2048


【20140828update】项目现在丢在了Github上面:https://github.com/JoeMartini/2048bySwift ,欢迎围观讨论。之前有提到我自己琢磨了个算法来实现数字的移动、叠加。这个算法的重点在于,按照移动方向的反方向遍历当前行或列中各个格子,因为方向相反,可以把检测、叠加和移动在一次循环中完成。今天把它又优化了一下,现在可以检测空行和空列了,对于空列在第一次遍历之后就会跳过,不会一次次遍历咯。算法示意图大概如下:algorithm

Swift笔记20140819update

    1. swift 是大小写敏感的 —— 包括变量名、变量类型、语句关键词……
    2. swift 中,两个整型变量相除,得到的仍是整型,小数部分被无情抛弃了
    3. 两个整型变量相除的结果(整型数)无法直接赋值给一个浮点型或双精度型变量,因为 swift 不允许变量类型隐式转换 average = Float ( Sum ) / Float ( number )
    4. 对于 String 型变量,可以用 string.hasPrefix(“”) 检测开头字符,用 string.hasSuffix 检测结尾字符
    5. String变量有.toInt方法强制转变为Int变量
    6. Double精确到小数点后16位,Float精确到小数点后8位
    7. 可选型?可以用!解包,必须被解包后才能操作
    8. 条件运算符——question?answer1:answer2  question为真取answer1,否则取answer2
    9. 字典所包含的数据对是“无序”的,不需要也无法排序,只能查询
    10. switch xxx case xxx default xxx 语句中可以用 where 语句检测额外的条件 (没懂……)
    11. for 循环中,可以直接用 for ( kind , numbers ) in Dictionary 创建二重循环遍历字典全部元素;之中可用 for number in numbers 遍历数组全部元素
    12. 数组的元素个数用 .count 获得
    13. super.init 语句用于设置父类的初始化属性
    14. 类( Class )的读写属性( var )的 set 语句、willSet 语句中,新属性值的名字可以通过 set( xxxx )的形式指定,不指定时,默认为 newVlaue;newValue 也可以是类的实例的名字
    15. 可以使用一个实例作为新类的一个属性
    16. 枚举其实就是自定义的“组合变量类型”,且其可以有通过函数定义的方法;枚举的赋值范围有限,顺序赋值,可单独赋值,单独赋值后,剩下的原始值会继续、顺序赋值

Movie A Dog’s Purpose (2017)