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

  • 相关阅读:
    springboot springdata 整合es
    forkJoinPool
    springboot整合ElasticSearch
    雪花算法生成全局唯一ID
    linux环境下elasticsearch+kibana+ik(实现热词自动更新)
    ECMAScript 6新特性简记
    Tsung:开源多协议分布式负载&压力测试工具
    js 数组迭代方法总结
    js for循环
    箭头函数this的问题
  • 原文地址:https://www.cnblogs.com/vital/p/3798742.html
Copyright © 2020-2023  润新知