Swift
和php一样, 咱们从符号开始:
-
: 冒号, var 变量名 : 变量类型.
-
单引号和双引号, 必须使用双引号声明字符串, 单引号会引起错误.
-
[]是数组或者字典. 也需要去看官方文档. 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 = [:]
-
循环和判断
let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } }
-
?!都是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)" //这样也可以
函数
- swift的函数调用是需要指明参数的lable的, 这个好, 尤其是多个参数, 很难记住参数顺序的.
- 函数的参数如果是函数的话——-听着就那么高级
- 这样我们进入到了一个swift入门话题: 嵌套函数
func g(a: (Int) -> Int) -> (Int) -> Int { ... } // Swift 3 这个还是用函数自身作为参数传入, 偶滴神啊.
2.0->3.0 看着都牛b.
- 方法的参数标签不可省略,从第一个参数就必须指定参数名,除非使用”_“明确指出省略参数;
- 枚举值的首字母统一为小写;
- Swift 3.0取消了C风格的for循环,for var i = 0 ;i < 10 ; i += 1语句变更为:for i in 0 ..< 10
- 枚举成员首字母变成小写;
- 按钮的Normal状态去掉,按钮状态UIControlState()相当于原来的.Normal;
- 取消++、–操作符;
- 方法名使用动词,其他名词、介词等作为参数或移除
1.0->2.0
- apps= [“Youtube”,”Google”,”Facebook”]时, if contains(apps, “Google”) , 变为: if apps.contains(“Google”) {, 字符串的各种操作也是一样的.
- do while变成repeat while, 话说这个变化有什么用吗?
- available判断pai版本
- do try catch, do用在了这里, 和do对应的就是要throw
- guard关键字. optional这块貌似要好好学学.
- defer关键字. {}结束之前执行
编程的智慧
http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy
这文章真的很棒, 我这里列几个要点, 强烈推荐原文:
- 反复推敲, 尽量优雅.
- 代码要拆成函数, 函数可以代替注释.
- 每个函数都不要超过40行. 因为我们最多同时看到四十行.
- 相近的内容放一起, 比如赋值和调用.
- 代码尽量少, 尽量简单.
- 尽量少用全局以及类成员作为参数. 不仅仅是调用的时候会出问题, 我自己的实践证明多线程的时候, 这种东西就完蛋了. //java框架的问题就在这里.
- 关于continue和break的看法我们是相反的, 我支持用这些.
- 关于尽量多return, 这个我们是一致的, 各种break如果可以, 都换成return.
- 个人看法if是有害的, 应该都用switch case(break)这样的分支选择. 作者也有相应的看法, 把if变成两个函数, 分别处理不同情况.
- 尤其是多个层次的if嵌套一定要函数化.
- 对于大括号和格式的态度, 我们也有分歧, 我更期待像python那样, 可以去掉大括号的语法, 因为括号的配对永远是个问题. 但是, 作者认为大括号给了我们格式的自由, 是可以接受的.
- 对于小括号和结合优先级的态度我们是一致的. 不要去背诵或者记忆各种优先级, 只要用小括号括号就行了.
- if xxx else return ooo, 这个格式, 作者要求不要省略else, 我的要求是, 把if翻转改为 if !xxx return.