Swift学习笔记(一)

1、用var来定义一个变量。

2使用let来声明常量(类似于C#里的Const关键字),使用var来声明变量。一个常量的值在编译时并不需要获取,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需要使用很多次。

3常量或者变量的类型必须和你赋给它们的值一样。然而,声明时类型是可选的,声明的同时赋值的话,编译器会自动推断类型。

如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。

4、值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。

5、使用方括号[]来创建数组和字典,并使用下标或者键(key)来访问元素。

6、要创建一个空数组或者字典,使用初始化语法。如果类型信息可以被推断出来,你可以用[]和[:]来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。(马勒戈壁,我怎么知道能不能被推断出来啊!所以为了安全起见,只能自己初始化指定类型)

7、使用if和switch来进行条件操作,使用for-in、for、while和do-while来进行循环。包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。

8、你可以一起使用if和let来处理值缺失的情况。有些变量的值是可选的。一个可选的值可能是一个具体的值或者是nil,表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。

9、switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break。

10、你可以使用for-in来遍历字典,需要两个变量来表示每个键值对。

11、使用while来重复运行一段代码直到不满足条件。循环条件可以在开头也可以在结尾。

12、你可以在循环中使用..来表示范围,也可以使用传统的写法,两者是等价的;使用..创建的范围不包含上界,如果想包含的话需要使用...。

13、 使用func来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值。

14、使用一个元组来返回多个值。

15、函数的参数数量是可变的,用一个数组来获取它们。

16、函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函数。

17、函数是一等公民,这意味着函数可以作为另一个函数的返回值。

举个栗子:

func makeIncrementer() -> (Int -> Int) {

    func addOne(number: Int) -> Int {

        return 1 + number

    }

    return addOne

}

(Int -> Int) 返回类型,表示外层函数和内嵌的函数返回值类型都是int类型。

18、函数也可以当做参数传入另一个函数。

举个栗子:

func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {

    for item in list {

        if condition(item) {

            return true

        }

    }

    return false

}

参数 condition: Int -> Bool condition 表示一个函数名,该函数有个int类型的参数,该函数返回值是bool类型。

19、函数实际上是一种特殊的闭包,你可以使用{}来创建一个匿名闭包。使用in来分割参数并返回类型。 有很多种创建闭包的方法。如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。

20、你可以通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。

21、使用class和类名来创建一个类。类中属性的声明和常量、变量声明一样,唯一的区别就是它们的上下文是类。同样,方法和函数声明也一样。

22、要创建一个类的实例,在类名后面加上括号。使用点语法来访问实例的属性和方法。

23、注意self被用来区别实例变量。(有点类似this)

24、如果你需要在删除对象之前进行一些清理工作,使用deinit创建一个析构函数。

25、子类的定义方法是在它们的类名后面加上父类的名字,用冒号分割。创建类的时候并不需要一个标准的根类,所以你可以忽略父类。

26、子类如果要重写父类的方法的话,需要用override标记——如果没有添加override就重写父类方法的话编译器会报错。编译器同样会检测override标记的方法是否确实在父类中。

27、属性可以有 getter 和 setter 。在perimeter的 setter 中,新值的名字是newValue。你可以在set之后显式的设置一个名字。

28、如果你不需要计算属性但是需要在设置一个新值之前运行一些代码,使用willSet和didSet。

29、类中的方法和一般的函数有一个重要的区别,函数的参数名只在函数内部使用,但是方法的参数名需要在调用的时候显式说明(除了第一个参数)。默认情况下,方法的参数名和它在方法内部的名字一样,不过你也可以定义第二个名字,这个名字被用在方法内部。

原文地址:https://www.cnblogs.com/vital/p/3798742.html