您的位置:首页 > 移动开发 > Swift

swift基础

2016-03-30 19:55 316 查看


一、概况


二、基本语法


1、swift是类型安全的语言


2、swift中的数据类型


3、闭包


4、元组类型和多个返回值


5、defer语句、guard语句、fallthrough语句


一、概况


1、swift语言是一门现代化的工业编程语言,吸取了C、OC、JavaScript、Python等语言的精华


1)、支持指针;支持结构体和枚举,并且更加强大






2)、基于cocoa和cocoa touch框架,swift与OC可以轻易的转换

类型的转换:OC <--->Swift



方法的转换:

OC:





Swift:






3)、代码看起来像脚本语言,更加接近自然语言,让JavaScript,Java,Python,C#,以及 C++ 的开发者更加容易入门

如使用repeat更自然语言:




2、swift语言支持多种编程范式


1)、面向过程编程


2)、面向对象编程


3)、函数式编程


4)、面向协议编程


5)、面向泛型编程

编程范式越多,说明能解决越多种类的问题,应用场景越多。

以下简单介绍几种范式:



下载

上一张
下一张

全屏模式


3、swift是更加安全的语言


1)、swift是类型安全的语言

下面介绍。


2)、swift自动支持ARC


4、Swift的其他优势(他人观点)

中文: http://www.oschina.net/translate/swift-vs-objective-c-10-reasons-the-future-favors-swift

英文:http://www.pcadvisor.co.uk/news/software/swift-vs-objective-c-10-reasons-the-future-favors-swift-3611295/


二、基本语法


1、swift是类型安全的语言


1)、swift是静态语言,在编译时就知道数据类型

a)、在初始化时指定类型



不过没有初始化或者赋值的变量/常量,无法被调用,否则会产生编译错误:Variable 'item2' used before being initialized

 

b)、在初始化时不指定类型,会进行类型推导



c)、数据类型唯一,一旦确定后,无法改变成其他类型

左:OC                                                 右:Swift



d)、不支持隐式类型转换



 


2)、可选类型、可选链

先看一种nil的情况:

在OC中,有以下三个嵌套类。另一个图是调用,什么事情都会不发生. 表达式或者一行操作变成了一项空操作(no-operation (no-op)), 而这就使得其看起来会有不会奔溃的好处, 但其实它已经变成了一个巨大的bug来源. no-op 会导致不可预测的行为。





而在Swift中,如果变量没有被初始化被调用,会报编译错误,这样在编码期间就杜绝了上面说的风险。



这里就引入了可选类型,来解决这个问题:如果变量为nil,则后面的操作不会



可选链:在emp.dep?.com?.name这样多个环节中使用可选类型?的方式就是可选链。


3)、拆包

强制拆包:如果确定可选类型一定有值,在调用变量时,用!来代替可选获取可选类型变量的值。

隐式拆包:在声明可选类型时,将?号变成!号,那么在调用时,可以不加?或者!。



实际上,在编码过程中,Xcode会自动提示你怎么加?或者!

 


4)、可选绑定

可选类型被区分为有值和nil,可以用来if判断:



可选类型在if或者while语句中赋值并进行判断的写法,叫可选绑定。

 


5)、类型检查与转换

a)、is操作符可以用来判断一个实例是否为某个类的类型

b)、AnyObject可以表示任何类的实例;Any可以表示任何类型

b)、as操作符奖一个变量转换为目标类型,如果转化成功,则转换,否则返回nil




2、swift中的数据类型

1)、两种类型:

值类型

在赋值或者传参时,创建一个副本,把副本传过去,不影响原始数据。

包括:整型、浮点型、布尔型、字符串、元组、集合、枚举、结构体

引用类型

在赋值或者传参时,把自身传过去,会影响原始数据。

包括:类



上例中:

a)、第199行定义了泛型函数;

b)、当传人引用类型时,通过229和231行比较,发现对象的属性发生了变化;

c)、当传人值类型时,未调用之前就报编译错误,值类型参数无法在函数内发生改变。

 

2)、inout可以让值类型在函数作为参数时被修改



注:调用inout修饰的函数,参数前要加上&


3、闭包

在swift中闭包有三种实现方式:


1)、全局函数




2)、嵌套函数




3)、闭包表达式



语法:

{  (参数列表) -> 返回值类型 } in

 }


4)、两个类之间通信举例




4、元组类型和多个返回值




5、defer语句、guard语句、fallthrough语句

defer表示延迟执行,后面跟{},其中包含一些操作,会被压栈,在函数执行完毕后再出栈,执行{}



 

 

guard语句跟if类似,判断一个条件是否为期望的,否则执行后面else中的语句



利用guard语句改写,让代码更加合理、清晰




fallthrough语句是贯通语句,在switch语句中,让原本不能贯通case的情况实现贯通

 

首先说明,swift中switch中没有break,但是不加break,进入swtich的条件也只会执行1个case,不会往下执行。



a)、j=1,首先进入case 1,i变成2

b)、因为case 1 中有fallthrough,进入case 2

c)、在case 2 中,i变成3,进入case 3

d)、在case 3 中,i变成4,这里没有fallthrough,虽然没有break,但是会跳出switch

最后 i == 4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: