Swift基础学习<一>

如下没事刷一刷,尤为是刚开始不熟悉的时候,等后面熟悉了 就直接根据大量写的项目 若是用oc写和用swift写有啥不一样,能够本身来自由发挥了:html

<1>.Swift 和 OC 的不一样编程

1.Swift 基于C 和 OC ,但没有C的一些兼容约束,添加了一些新功能,让编程变得简单,灵活,有趣。
2.它融合了不少现代编程语言的优势,诸如闭包这样的高级语言特性(我的理解:闭包不是oc也有block么,不太高阶函数倒没有)。
3.在语法结构上简洁优雅,有点像JS。
4.对LLVM编译器速度有所优化,swift进行开发 编译快 (暂时没感受到,之前混编一直编译慢,为何呢?)
5.Swift是开源,将来的趋势。更多不一样可没事刷刷: https://www.kingwins.com.cn/content-3213.html ,以及更多最新的资料讯息。
6. Playground 能够在学习语言时,不用编译运行,省去了编译运行的耗时,写的过程当中实时显示运行结果(第一次的时候能够会慢些)。提升了学习效率。

<2>.语法上的细节及要学习的点:swift

基础不一样:

   1.命名:swift的字母采用的是  Unicode 编码,因此咱们能够用中文等亚洲文字进行命名,表情也能够。
   2.let和var来定义 常量和变量,Swift开发原则是尽可能使用常量,由于常量的运行效率更高。若是你声明的变量没有在代码里发生改变,那么编译器会提示你把变量修改为常量。
   3.不用在后面写 ; 分号。
   4.类型推测。不用指定声明对象的类型,会根据赋值来推导肯定它的类型。
      swift是一门强类型语言(具体强类型弱类型的概念我仍是有点迷糊,稍后补充吧),类型安全,编译期检查全部的类型。
   5.swift采用字符串插值的方式在输出的内容加入常量或变量,将变量名放在 \()括号中。
工程项目中尽可能不要写 print ,养成打断点的好习惯,由于这些print对用户而言是没有意义的,并且每次编译运行打印都会消耗时间成本。

   6.swift里的布尔值,不接受 0 表明 false , 1表明 true的用法。也没有yes和no。
   7.<重点> 元组(数组的组字):
元祖相似一个,能够放不一样类型的数组。好比 let message = (“小明”,9,”三年二班”).
能够经过索引获取了 message.0 ,获取 小明。
也能够用成员变量命名,好比 : let message = (name:”小明”,age:9,grade:”三年二班”)
能够经过名称调用: message.name

还有一种玩法就是,若是想要获取元祖中的某些重要部分加以利用,忽略一些不重要的信息时,能够把元祖的值传递到一个新元祖中,例子: let message = (name:”小明”,age:9,grade:”三年二班”), let (showName,,) = message . 而后打印 showName 就仅仅输出的是 小明这样的重要信息了。数组

8.<重点>可选型。
用于某些不肯定是否有值的状况,其有两个返回值:具体的值和nil,nil表示空值。定义可选型只须要在常规类型后面加一个问号 ? 便可。

例如:var age:Int ? . 这样age就被定义成了一个可选型,若是它有值就必定会返回一个Int类型的值,不然返回nil。 经常用于搜索和转型方法的返回值类型,由于这两种常常会出现失败的状况。好比 var age:Int ? 结果是 nil . 而后从 age = Int(“12”) 结果是 12 , age = Int(“小明”) 结果是 nil . Swift 中的类和结构体在初始化时其内部的全部属性必须被初始化,不然没法经过编译,这也是出于安全性的考虑。把一个变量定义为可选型,在没有赋值状况下它会被默认赋值为 nil. <重点>对可选类型解包: 1.当咱们肯定一个可选型的值不为nil的时候,可使用解包获取其中的值。它的表现形式很简单,在须要解包的变量名后面加一个 ! 感叹号,就能够解包。可是若是你忘了对变量赋值却又使用了 ! 号 ,程序在解包的时候就会崩溃。 2.再把可选型转非可选型的赋值语句中常常用到 “??” 操做符,两个问号以前为一个可选型,以后为一个费可选型,?? 操做符自带解包功能,例子: Var age:Int , Age = Int(“12”) ?? -1 。 结果是 12 . 转型成功。 Age = Int(“小明”) ?? -1 。结果是 -1 . 转型失败。 3.<重点之重点> 相比于强制解包,swift 提供了一种更安全的解包方式:可选绑定。 可选绑定有两种格式可选: if - let 和 guard - let - else . 例子1: if - let 结构:安全

Var age:Int ? = Int(“12”) If let a = age { print(a) } 相似于 if 语句,当 age 不为空的时候,对 age 进行解包并给其一个 别名 a . 而后执行花括号里的内容。若是age为nil,那么大括号中的代码不会执行。使用可选解包程序不会崩溃。闭包

例子2:guard - let -else 格式 (swift2.2引入):编程语言

Guard let a = age else { return //终止方法 } print(a) //在外部使用解包后的值。不一样于if-let的是 ,它首先处理age为nil的状况,在此种状况中必须在花括号对中使用return 或者 break提早终止代码。于if-let结构相同的是,若是age有值会被保存在别名a里,不一样的是无论有多少个 guard - let -else ,别名 a的做用域都在最外层,有效避免了过于深刻的嵌套。函数

9.赋值运算符 = 号,swift为了不发生 两个等号判断写成了一个等号变成了赋值,这样的写法系统会直接提示错误:

If x = y {. }学习

10.swift的 + 号,除了基础的运算 还能够直接用来拼接字符串,整数和浮点数作加法。 % 能够对浮点数求余,这都是oc不具有的。
11.swift 3.0之后没有 ++ 和 — 这样的运算符,自增和自减用 : a += 1 , a -= 1. (至关于 a = a + 1)这样的写法能够指定“步长”。
12. == 在 swift 里能够比较任何类型,不用像oc等语法那样使用不一样的 isEqual方法。其余c中的比较运算符 swift均可以用。
13.接下来讲 三元运算符, 判断条件 ? 为真时的操做 : 为假时的操做。例子: var 名字 = 180 < 160 ? “小明” : “小刚” .
14.范围<重点>. 例子: 1…5 表示闭区间 [1,5] ,也就是从 1 到 5 的范围。
			   1..<表示半闭区间 [1,5),也就是从 1 到 4。
常常在for循环语句使用 
for index in 1…5 { println(index)}.
switch 里使用 :  case 1…2: print (“Hello” )
15.字符串与字符(待补充,下节看点)