swift语言学习

一、可选类型

swift的可选类型用于处理变量可能为nil(空值)即缺失的情况。在swift中,可选类型通过在原始类型后面添加问号(?)来声明(注意:类型与?之间没有空格)。例如以下的这两个声明是相同的:

这两种情况,都可以声明变量为可选整数类型变量.同时显示声明也可以如

1.可选类型的枚举

swift的可选类型实际上是一个枚举(枚举是一种用于定义一组相关值的类型,它允许在一个类型安全的方式下定义一组相关的值,并且可以在代码中使用这些值,枚举可以包含不同的数据类型)类型,包含none(没有值)和some(包含一个值).

2.可选类型的使用

2.1范围给定

声明可选变量的时候,不仅要确保使用?使用,同时也要使用问好给?操作符合适的范围。

例如,我们在声明整数数组的时候,如果下成下面的第一个形式就会报错,正确的写法应该是第二个形式.      (应写成 (Int[])?          写成 Int[]? 会报错。)

2.2初始值

当声明应该可选变量或者可选属性(类、结构体和枚举的属性)的时候没有提供初始值,那么它的值默认为nil(空值).

2.3布尔环境中应用

在布尔环境中,如果可选类型的值为Optional.some(包含一个值)那么这个可选类型等于true,否则为false.

2.4访问

可选类型可以用后缀操作符感叹号(!)来访问这个值。

3可选类型与nil的比较

可选类型与Objective-C中指针nil的值(表示指针不再指向任何有效的对象)很相似,但nil只对类(class,而可选类型对所有类型都可以使用,且更加安全。

4.隐藏式可选类型(自动解析)

当确定一个可选类型总是包含值时,可以使用隐藏式解包可选类型,将!放在类型的末尾,表示在使用该值的时候可以自动解包,如图下面的例子:

5.强制解包

当确定可选类型确实包含值以后,可以使用!(用于表示已知可选有值可以使用)来强制解包可选类型,注意:如果可选类型为nil(空值),强制解包会导致允许时崩溃。

6.可选绑定

使用可选绑定可以判断可选是包含值,如果包含就把值赋值给一个临时常量或变量。可选绑定可以在if和while语句中来对可选类型的值进行判断并把值赋值给一个常量或变量。如下有可选绑定的实例:

运行的结果为:

二、字面量

定义:表示特定类型的常量值的语法表示形式,允许直接指定常量的值,而不是通过变量或表达式进行计算。

1.整型面量

整型字面量可以是一个十进制、二进制(0b开头)、八进制(0o开头)或十六进制(0x开头)常量。

2.浮点型字面量

浮点型字面量有整数部分,小数点,小数部分及指数部分。

浮点型字面量可以是Float或Double类型。swift默认的浮点型字面量类型是Double。(如果要使用Float类型的浮点数,可以在字面量后面加F或者使用显示类型声明)。浮点型字面量默认用十进制表示,要使用十六进制表示要加前缀0x。

浮点型字面量(十进制)由十进制数字后跟小数部分或指数部分组成。

2.1.小数表示法

2.2.科学计数法表示法

2.3.十六进制表示法

十六进制浮点型字面量由0x后跟可选的十六进制小数部分以及十六进制指数部分组成。十六进制小数部分由小数点后跟十六进制数字串组成。指数部分由大写或小写字母p为前缀后跟十进制数字串(e之前的数量乘以10的几次方)组成,如以下的例子:

(0xFp2 表示 15 ⨉ 2^2,也就是 60;同样,0xFp-2 表示 15 ⨉ 2^-2,也就是 3.75。)

2.4.可读性

浮点型字面量允许使用下划线和在数字前加0来增强数字的可读性,不会影响字面量的值。

3.字符串型字面量

字符串的字面量,用双引号括起来。

注意:字符串型字面量不能包含未转义的双引号(“),未转义的反斜线(\)、回车符或转行符。

4.布尔字面量

布尔型字面量的默认类型是Bool,布尔值字面量有三个值:true(真),false(假),nil(没有值)。

5.数组字面量

6.字典字面量

三、运算符

1.算术运算符

算术运算符包括加号(+)、减号(-)、乘号(*)、除号(/)、求余(%)

注意:swift语言的最新版本,中自增(++)、自减(--)运算符已被移除。

例子:编写包含以上运算符的计算器。

2.比较运算符

比较运算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)

例子:

运行的结果为:

3.逻辑运算符

逻辑运算符包括:与(&&)、或(||)、非(!)

例子:

运行的结果为:

4.位运算符

位运算符用来对二进制进行操作,~(取反),&(与),|(或),^(异或),<<(左移),>>(右移)。下面我以下面的例子来一一说明。

其中:A为2转化为2进制就为10

B为3转化为2进制为11

运行的结果为:

1.与

a&b:对a,b每一位(二进制)进行与操作,只有两个位都为1时候,结果才为1,否则为0.

2.或

a|b:对a,b每一位进行或操作,只要两位中至少有一个1,结果就为1

3.异或

a^b:对a,b每一位进行异或操作,当两个位不相同,结果为1

4.取反

~a:对a,每一位进行取反操作,即对a的每一位都取反

5.左移

a<<b:将a的所有位左移b位,右侧空缺的位用0填充。

a>>b:将a的所有位右移b位,左侧空缺的位用0填充。

5.赋值运算符

例子:

运行的结果为:

6.区间运算符

1.闭区间运算符

闭区间运算符(a...b)(a<b)定义一个包含从a到b(包括a和b)的所有值的区间。常用在for in循环中

2.半开区间运算符

半开区间(a..<b)定义一个从a到b但不包含b的区间,注意:包括a。

7.其他运算符

1.一元运算符

一元运算符对单一操作对象操作,一元运算符分前置运算符(需要紧跟在操作对象之前)和后置运算符(需要紧跟在操作对象之后),区分:在C语言中没有c!的语法,在swift中用在Optional类型取值,如一元减(-3)、一元加(+2)。

2.二元运算符

二元运算符操作两个操作对象,而且放置在对象之间。如(2 + 3)

3.三元运算符

和C语言一样,A?B:C(A为真执行B,A为假执行C)

8.运算符优先级

不同优先级从高到低,相同优先级大多数按从左到右,只有三个优先级从右到左(单目运算符(一元运算符)、条件运算符、赋值运算符)。

基本的优先级:

  • 指针最优,单目运算优于双目运算。如正负号。
  • 先乘除(模),后加减。
  • 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
  • 逻辑运算最后计算

四、条件语句

1.?:运算符

a?b:c;

表示a为真执行b,a为假执行c。

2.if语句

组成:由一个布尔表达式和一个或多个执行语句组成。

语法:if a{

//如果布尔表达式为真将执行语句

}

例子:

运行结果为:

3.if...else语句

语法:if a {
   /* 如果布尔表达式为真将执行的语句 */
} else {
   /* 如果布尔表达式为假将执行的语句 */
}

例子:

运行的结果为:

4.if...else if...else语句

一个if语句后可以跟一个可选的else if...else语句。但使用的时候注意:

  • if 语句后可以有 0 个或 1 个 else,但是如果 有 else if 语句,else 语句需要在 else if 语句之后。
  • if 语句后可以有 0 个或多个 else if 语句,else if 语句必须在 else 语句出现之前。
  • 一旦 if 语句执行成功,其他的 else if 或 else 语句都不会执行。

语法:

if a1 {
   /* 如果a1 表达式为 true 则执行该语句 */
} else if a2 {
   /* 如果 a2 表达式为 true 则执行该语句 */
} else if a3 {
   /* 如果 a3 表达式为 true 则执行该语句 */
} else {
   /* 如果以上所有条件表达式都不为 true 则执行该语句 */
}
例子:

运行的结果为:

5.内嵌if语句

在if或else if语句内使用另一个if或else if语句

语法:

if a1 {
   /* 当 a1 表达式 true 时执行 */
   if a2 {
      /* 当 a2 表达式 true 时执行 */
   }
}

例子:

运行的结果为:

6.switch语句

语法:

switch expression {
   case expression1  :
      statement(s)
      fallthrough /* 可选 */
   case expression2, expression3  :
      statement(s)
      fallthrough /* 可选 */
  
   default : /* 可选 */
      statement(s);
}
注意:一般在switch语句中不使用fallthrough语句(用于继续执行下一个 case)。在大多数语言(如C语言)中switch语句块中case之后的语句会顺序运行,所有想要终止运行要在case后紧跟break,但对于swift语言中,默认是不会执行下去的,switch也会终止,如果想要case后面语句按照顺序运行,则需要用fallthrough)

例子:

有fallthrough:

运行的结果为:

没有fallthrough:

运行的结果为:

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值