来看看Swift中的基础

2018-9-14

在2014年的WWC全球开发者大会上,苹果向世界展示了它自身开发的编程软件。而且在性能上苹果的数据显示Swift的运行速度比Objc快上几倍。虽然说现在Objc还是很多人用,但是Swift也不少。那么如果你先学习Swift,那些基本的语法知识你会吗?下面我们将对swift中的变量、语法、字典以及循环进行了解。

变量和常量

变量和常量就是把一个名字和一个指定类型的值关联起来,不同的是,关联之后只有变量的值可以改变。下面是定义变量和常量需要注意的:

1.Swift中使用let定义常量,var定义变量。而且let 定义的必须在声明的时候指定一个初始值给它。而普通的var声明也要赋一个初始值。

2.上文说了,let声明的不可以被改变,var声明的可以被改变。但是你不能在使用已经声明的名字。

3.和C语言一样,你可以在同一行同时声明多个变量或常量,但是在一个变量声明后必须用分号隔开。

4.每一个变量和常量都会有对应的类型,如果你在声明的时候没有说明类型。那么Swift会自动根据后面你给出的初始值进行判断。

5.你可以在swift里声明元组,类型类似于(Int, String),你可以用var声明也可以用let声明,那么里面两个都会是变量或者常量。

6.声明元组的方式和直接分开声明两个变量或者常量没多大区别,你可以把其中的变量拿出来单独用或当元组用,混合用也可以。

7.可以用元组名直接通过下标索引直接来访问元组里对应的值,比如aaa.0 aaa.1。

8.你可以在元组中跟元素命名,比如(code:404,message:"Not Found"),然后你就可以用aaa.code 和 aaa.message来访问。

9.常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。除了这些没有其他的任何规定。

10.如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字包围的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。

语法基础

1.Swift中你在语句后面加不加分号都可以,而Swift的风格是不加分号。但是刚刚上文也说了,在同一行多条语句的情况下就要加分号。

2.在一个数字中庸下划线(_)会被忽视,方便认出大数值的的数字,也可以在前面补零。

3.Swift中不允许在不同的类型之间运算加减乘除,必须先要进行类型的转换。C也是

4.typealias 可以为一个类型指定另外一个名字,这样可以清晰的表达类型的意义.typealias newType = OldTypeName。

5.swift中的 = 赋值运算符没有返回值,所以不会犯 if a = 3 {}这样的错误了,而运算符前后最好加空格,以免xcode不能识别。

6.assert 断言表示自己抛出异常,assert 第一个参数表示 通过而不抛异常的条件,第二个参数表示提示,第二个参数可以没有。

输出

在Swift中使用println 和print 函数输出当前变量或者常量的值,它的传参是一个泛型,几乎所有类型都是可打印的。println是一个用来输出的全局函数,输出的内容会在最后换行。(print,唯一区别是在输出内容最后不会换行。)如果你用 Xcode,println将会输出内容到“console”面板上。

注释

将你的代码中的非执行文本注释成提示或者笔记以方便你将来阅读。Swift 的编译器将会在编译代码时自动忽略掉注释部分。

swift还是使用// 和/* */ 来注释,并且/* */允许多行注释。

类型

1.Swift 提供了8,16,32和64位的有符号和无符号整数类型(Uint)。这些整数类型和 C 语言的命名方式很像,比如8位无符号整数类型是UInt8,32位有符号整数类型是Int32。而你可以使用mix和max属性去获取对应的最大最小值。

2.Swift中double是64位的浮点数,而float是32的浮点数。如果你没有在声明的时候指定类型,会自动对小数判断为double类型

3.Swift中可以对一个浮点类型的常量或变量赋一个整数值,但是不能是一个整数变量。赋值后会自动转换成浮点数。

4.显示指定类型的变量或常量不能跟它赋值一个不同类型的值,它不能做自动转换,除了跟浮点类型赋值一个整数数值。

5.你可以在指定类型的后面加一个 ? ,这样表示是可选类型,你可以通过可选绑定或者判断是否为空来使用它。下面我们会说一下可选绑定。

6.?其实是一个糖衣语法,例如String?类型等价于Optional类型,只是方便写而已,他和String类型本质是不同的。

7.如果class是一个可选类型的话,你可以通过?对它的属性以及方法进行访问。它是通过前者是否会相应后面的方法,如果能响应则执行,不能则返回nil(nil代表无值)。

8.为什么要存在可选类型,因为Swift是一个类型安全的语言。它规定你在使用变量的时候一定要有值,可是这种可选类型太麻烦,所以就产生了!类型,这个类型本身就是可选类型。如果你声明!可选变量,你可以不进行初始化。它相当于你在每次使用可选类型的时候加上了!进行强制解包,你就不需要再自己加!了,你需要自己保证它不为空,否则使用会出错。

可选

使用可选(optionals)来处理值可能缺失的情况,可选表示为:有值或者没有值。

举一个例子:在Swift中有一个toInt 的方法,可以讲一个String类型的值转换为一个int值,但是字符串“123”可以被转换但是“hey ”不可以。所以toInt方法有可能会失败,所以它返回了一个可选int,而不是一个int。可选的int写作int?。然后你可以通过其他办法判断里面是否为空。

可选绑定

使用可选绑定(optional binding)来判断可选是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选的值进行判断并把值赋给一个常量或者变量。

字符串

1.比较两个字符串是否相等 判断字符串相等的方法是: ==

2.比较两个字符串的大小 (< 或者 >)

3.判断字符串的前缀 和 后缀 大小写转换。前缀使用后缀使用hasPrefixlet,bool = XX.hasSuffix("要判断的字符")

4.+ 可以直接加字符串或数组

5.字符串的遍历使用for in,计算字符数使用count 全局函数,判断字符串是否为空使用isEmpty。

6.字符串中如果要获取开始和结束下标可以使用startIndex和endIndex。可以使用数组和下标的形式访问单个字符,还可以使用\\()的方式生成字符串。

数组

Swift中的数组有两种声明方式:[String]和Array。但是它们其实是同一个意思。你也可以通过[Double](count: 3, repeatedValue: 3.3) / Array(count: 3, repeatedValue: 2.5) 初始化一个数组。作用就是创建一个3个元素的数组,每一个元素都是2.5。

array 有count/isEmpty等属性,有append/insert/remove等方法。你可以使用+来加一个数组它可以通过下标和下标区间来取值,区间取到的是一个数组。

注意,数组也是传递值,把一个数组传递给另一个数组之后,两个数组之间的修改不会有影响。

字典

字典是一个存储同一类型多个值的容器。每一个值都有唯一对应的key,类似于字典中每一个值都有一个标识符。但是他和数组不同的是,字典中的元素是没有特殊的序列的。

1.字典是通过 [String : String] / Dictionary<String, String> 声明的,形式也是用[a:b,c:d]这种形式,通过键访问值。

2.如果你想增加一个键值对,你可以通过a[b] = c 这种方式,而使用updateValue和removeValueForKey可以直接增加删除键值对。对于初学者可能会认为键值对是打错,但是并不是。字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对)

3.可以用for (airportCode, airportName) in airports / for airportCode in airports.keys 遍历键值对或键或值。

4.如果你赋值 [:] ,那么会直接清空字典。

5.键值可以使int的。

6.字典也是值拷贝,和string,array一样。

Set

Set是一种特殊的无序集合类型。

1.用Set声明Set,它的赋值方法和数组的一样,但是赋的值一定要和定义的类型相同。当然也可以通过赋值 [] 清除。

2.Set无序集合中也有for in 遍历。例如:取两个集合的差交做排列的方法,判断子集超集的方法等等。

for循环

在Swift中提供了两种for循环的形式:

for in,用来遍历一个区间,序列,集合以及系列中的所有元素。

for 和C语言的相似,用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。

下面是一些要注意的:

1.for index in 1...5 的这个index只是在当前这个循环的作用域内,如果for循环外面也有一个index,随便修改也不会和它又什么影响。

2.for var index = 0; index < 3; ++index 这种for循环也还是可以的。

3.for _ in 1...10 如果不需要循环的这个索引可以用下划线_代替,在swift中只要不需要那个值的一般都可以用_代替。

switch

Swift中的switch语句比在C中的强大了很多,下面我们看看switch的功能:

1.一个case块可以匹配多个值。

2.不存在隐式贯穿和显式贯穿。

3.使用break结束switch。

4.范围匹配和元组匹配。

5.值绑定。

6.where判断语句。

7...

使用switch要注意的:

1.必须要穷举所有的可能性,不然的话就要加上default。和C一样。

2.穷举可以是用...和..<表示的一个区间,对于元组可以一个用_通配符,另一个匹配,或者两个都匹配,或者两个都是区间(只有一个元素也可以做值绑定)。

3.在使用Swift做统配的时候,可以使用var x / let x,或 let (x,y) 进行值绑定,,其中var声明的可以修改。

4.如果你switch中不使用break,它会去下一个case中继续匹配,使用break可以直接跳出switch。

5.在switch同样可以使用break/continue跳出一个标签。

总的来说,Swift语言功能非常强大,在它的基础中含有了许多Objc和C都没有的概念。但是它和Objc又有很多相似,所以对于Objc的开发者来说,Swift的运用不会太难。而且Swift的语言代码也不复杂,简而易懂。所以有兴趣的朋友可以学习学习。






暗色背景
手机扫码阅读本页