swift基础

来源:互联网 发布:网络强国与青年运动 编辑:程序博客网 时间:2024/05/08 16:41

一、概况

二、基本语法

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


0 0
原创粉丝点击