和php一样, 咱们从符号开始:

  1. : 冒号, var 变量名 : 变量类型.

  2. 单引号和双引号, 必须使用双引号声明字符串, 单引号会引起错误.

  3. []是数组或者字典. 也需要去看官方文档. todo

    var shoppingList = ["catfish", "water", "tulips", "blue paint"]
    shoppingList[1] = "bottle of water"
    var occupations = [
        "Malcolm": "Captain",
        "Kaylee": "Mechanic",
    ]
    occupations["Jayne"] = "Public Relations"
    //创建空的
    let emptyArray = [String]()
    let emptyDictionary = [String: Float]()
    //类型可推断的情况, 也可以这样: 为还没有找到这个可以用的地方, 找到了, 定义的地方就可以.
    shoppingList = []
    occupations = [:]
    
  4. 循环和判断

    let individualScores = [75, 43, 103, 87, 12]
    var teamScore = 0
    for score in individualScores {
        if score > 50 {
            teamScore += 3
        } else {
            teamScore += 1
        }
    }
    

  5. ?!都是optional的领域, 去看官方文档. todo

疑问

var detailViewController: DetailViewController? = nil //问号啥意思?
var objects = [Any]() //[], any, ()都是啥意思?
var window: UIWindow?  //问号啥意思?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // _ [] ? -> 都是啥意思? 这个是3.0引入的, 意思是, 参数的label可以省略. 

常量和变量

let 常量名=100
var 变量名=200
let 浮点常量: double=70 //这个就声明了浮点
let 浮点常量=70.0 //这个和上面一句一样的意义
let xxx= "我的数字: "+ string(fudianchangiliang) //必须显式转化类型, 这句话已经不是这样了, 在3.0
print(String(describing: 50)) //这才是3.0
xxx= "我的数字: + \(fudianchangiliang)" //这样也可以

函数

  1. swift的函数调用是需要指明参数的lable的, 这个好, 尤其是多个参数, 很难记住参数顺序的.
  2. 函数的参数如果是函数的话——-听着就那么高级
  3. 这样我们进入到了一个swift入门话题: 嵌套函数
func g(a: (Int) -> Int) -> (Int) -> Int  { ... } // Swift 3 这个还是用函数自身作为参数传入, 偶滴神啊.

2.0->3.0 看着都牛b.

  1. 方法的参数标签不可省略,从第一个参数就必须指定参数名,除非使用”_“明确指出省略参数;
  2. 枚举值的首字母统一为小写;
  3. Swift 3.0取消了C风格的for循环,for var i = 0 ;i < 10 ; i += 1语句变更为:for i in 0 ..< 10
  4. 枚举成员首字母变成小写;
  5. 按钮的Normal状态去掉,按钮状态UIControlState()相当于原来的.Normal; 
  6. 取消++、–操作符;
  7. 方法名使用动词,其他名词、介词等作为参数或移除

1.0->2.0

  1. apps= [“Youtube”,”Google”,”Facebook”]时, if contains(apps, “Google”) , 变为: if apps.contains(“Google”) {, 字符串的各种操作也是一样的.
  2. do while变成repeat while, 话说这个变化有什么用吗?
  3. available判断pai版本
  4. do try catch, do用在了这里, 和do对应的就是要throw
  5. guard关键字. optional这块貌似要好好学学.
  6. defer关键字. {}结束之前执行

编程的智慧

http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy

这文章真的很棒, 我这里列几个要点, 强烈推荐原文:

  1. 反复推敲, 尽量优雅.
  2. 代码要拆成函数, 函数可以代替注释.
  3. 每个函数都不要超过40行. 因为我们最多同时看到四十行.
  4. 相近的内容放一起, 比如赋值和调用.
  5. 代码尽量少, 尽量简单.
  6. 尽量少用全局以及类成员作为参数. 不仅仅是调用的时候会出问题, 我自己的实践证明多线程的时候, 这种东西就完蛋了. //java框架的问题就在这里.
  7. 关于continue和break的看法我们是相反的, 我支持用这些.
  8. 关于尽量多return, 这个我们是一致的, 各种break如果可以, 都换成return.
  9. 个人看法if是有害的, 应该都用switch case(break)这样的分支选择. 作者也有相应的看法, 把if变成两个函数, 分别处理不同情况.
  10. 尤其是多个层次的if嵌套一定要函数化.
  11. 对于大括号和格式的态度, 我们也有分歧, 我更期待像python那样, 可以去掉大括号的语法, 因为括号的配对永远是个问题. 但是, 作者认为大括号给了我们格式的自由, 是可以接受的.
  12. 对于小括号和结合优先级的态度我们是一致的. 不要去背诵或者记忆各种优先级, 只要用小括号括号就行了.
  13. if xxx else return ooo, 这个格式, 作者要求不要省略else, 我的要求是, 把if翻转改为 if !xxx return.