随着swift的应用越来越多,越来越成熟,又开启了一段新的学习旅程,不过也是必然的, 从苹果推广swift的决心就能看出,那现在就整理一下Swift的笔记.
以下是一些swift学习资源的网址,现分享给大家!
* 苹果官方博客 https://developer.apple.com/swift/blog/
* 开源github https://github.com/apple/swift
* 苹果官方 Swift 2.0 电子书 https://itunes.apple.com/us/book/id1002622538
* 2.0 中文版 http://wiki.jikexueyuan.com/project/swift/
* Let's Swift http://letsswift.com/
* 100个Swift必备tips,作者王巍,建议购买实体书 http://onevcat.com
一.Swift与OC的不同
1.在 Swift 中没有了 main.m,@UIApplicationMain 是程序入口
2.在 Swift 中只有 .swift 文件,没有 .h/.m 文件的区分
3.在 Swift 中,一个类就是用一对 {} 括起的,没有 @implementation 和 @end
4.每个语句的末尾没有分号,在其他语言中,分号是用来区分不同语句的
5.在 Swift 中,一般都是一行一句代码,因此不用使用分号
二.与 OC 的语法快速对比
1.在 OC 中 alloc / init 对应 ()
2.在 OC 中 alloc / initWithXXX 对应 (XXX: )
3.在 OC 中的类函数调用,在 Swift 中,直接使用 .
4.在 Swift 中,绝大多数可以省略 self.,建议一般不写,可以提高对语境的理解(闭包时会体会到)
5.在 OC 中的 枚举类型使用 UIButtonTypeContactAdd,而 Swift 中分开了,操作热键:回车 -> 向右 -> .
6.Swift 中,枚举类型的前缀可以省略,如:.ContactAdd,但是:很多时候没有智能提示
7.监听方法,直接使用字符串引起
8.在 Swift 中使用 print() 替代 OC 中的 NSLog
三.Swift的基本使用
3.1 常量和变量
let 定义常量,一经赋值不允许再修改
var 定义变量,赋值之后仍然可以修改
注意:1.应该尽量先选择常量,只有在必须修改时,才需要修改为 var
2.在 Xcode 7.0 中,如果没有修改变量,Xcode 会提示修改为 let
自动推导: Swift中程序可以通过等号右边的值准确的推导出等号左边常量或者变量的数据类型 快捷键 option + 鼠标左键
通常在开发时,不需要指定变量的类型
如果要指定变量,可以在变量名后使用:,然后跟上变量的类型
wift 对数据类型要求异常严格
Swift中没有隐式转换 需要程序员自己改变常量或者变量的类型
3.2 可选项Optional
定义变量时,如果指定是可选的,表示该变量可以有一个指定类型的值,也可以是 nil
定义变量时,在类型后面添加一个 ?,表示该变量是可选的
变量可选项的默认值是 nil
常量可选项没有默认值,主要用于在构造函数中给常量设置初始数值
可选项不能直接参与运算
解决方法:
01 使用‘!’ 强行解包(程序员向系统保证我的可选项一定有值 肯定不为nil)
fatal error: unexpectedly found nil while unwrapping an Optional value
缺点: 如果我们对一个可选项进行解包的时候如果该可选项为nil 的 会造成程序崩溃
02 使用‘??’ 运算符
?? 运算符可以用于判断 变量/常量 的数值是否是 nil,如果是则使用后面的值替代
在使用 Swift 开发时,?? 能够简化代码的编写
- 使用场景举例
- sex 男 0 女 1 人妖 nil 泰国
- sex 男 0 女 1 太监 nil 清朝
- 开发中
-后台 头像 url 第一次登陆 nil 如果不为nil
代码实现:
func demo1(){
var a:Int? //= 5
print(a)
// 定义一个常量 而且是必选项
// 完成a + b 操作
let b = 10
// 方式01 强行解包
//let result = a! + b
// 方式02 ?? 运算符 格式: (可选值 ?? 程序员自己设置的默认值)
let result = (a ?? 0) + b
print(result)
}
3.3 控制流
if:Swift 中没有 C 语言中的非零即真概念;在逻辑判断时必须显示地指明具体的判断条件 true / false;if 语句条件的 () 可以省略,但是 {} 不能省略
三目:Swift 中的 三目 运算保持了和 OC 一致的风格
可选项:由于可选项的内容可能为 nil,而一旦为 nil 则不允许参与计算,因此在实际开发中,经常需要判断可选项的内容是否为 nil
if let :不能与使用 &&、|| 等条件判断,如果要增加条件,可以使用 where 子句,注意:where 子句没有智能提示
if let :是用来判断一个属性是否为空
代码实现:
// 多个可选项判断
func demo3(){
// 名字
let name: String? = "老王"
// 年龄
let age: Int? = 18
// 使用if-let判断
if let n = name, let a = age {
print(n,a)
}
}
guard:guard 是与 if let 相反的语法,Swift 2.0 推出的.使用 guard 的好处:能够判断每一个值;在真正的代码逻辑部分,省略了一层嵌套
switch:switch 不再局限于整数;switch 可以针对任意数据类型进行判断;不再需要 break;每一个 case后面必须有可以执行的语句;要保证处理所有可能的情况,不然编译器直接报错,不处理的条件可以放在 default 分支中;每一个 case 中定义的变量仅在当前 case 中有效,而 OC 中需要使用 {};switch 中同样能够赋值和使用 where 子句
switch代码实现:
func demo1(){
let name = "良"
switch name {
case "优":
let n = "老王"
print("90-100分")
case "良":
print("80-90分")
case "中":
print("60-80分")
case "差":
print("0-60分")
default:
print("其他")
}
}
参考文章网址: http://www.jianshu.com/p/5601457ab4ac