swift 入门笔记

开发环境搭建Hello World

  1. 安装Xcode
  2. File => New => Playground

    import UIKit
    var str = "Hello World,yahue"
    

    在Playground 就可以看到Hello World,yahue

    数据类型

    内置类型:

    swift内置类型非常丰富,列举几个

    int:整型

  3. 长度和运行平台对应

    32位平台=>Init32
    64位平台=>Init64

  4. 长度范围:-2,147,483,648~2,147,483,647

UInt 无符号整型

浮点数

Double

表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。

Float

表示32位浮点数。精度要求不高的话可以使用此类型。

Double精确度很高,至少有15位数字,而Float最少只有6位数字。选择哪个类型取决于你的代码需要处理的值的范围。

布尔值

Boolean 值有true和false

… 不一一介绍内置类型了

类型别名

对当前类型定义一个别名
如:
import Cocoa

typealias meter = Int
var distance: meter = 10086
print(distance)

playground 执行以上程序,输出结果为:

10086

类型安全

swift是个强类型的语言,声明之后不能修改类别
如以下代码:
import Cocoa

var a = 10010
a = "10086"
print(a)

在xcode中会直接提示错误

error: cannot assign value of type 'String' to type 'Int'
a = "10086"

类型申明

类型声明的方式有多重

###var 声明一变量

变量是一种使用方便的占位符,用于引用计算机内存地址。

如代码:

import Cocoa

var var1 = 421
print(var1)

var var2:Float

var2 = 3.1415926
print(var2)

输出:
421
3.1415926

###let 声明一个常量

申明方式和var一样,但是意义不一样
常量一旦设定,在程序运行时就无法改变其值。

可选类型的申明

可选(Optional)类型,用于处理值缺失(值为null)的情况。

申明方式:

var optionalInteger: Int?
var optionalInteger: Optional<Int>

代码示例:
import Cocoa

var vars1:String? = nil

if vars1 != nil {
    print(vars1)
}else{
    print("字符串为 nil")
}

运行结果:

字符串为 nil

强制获取值:

import Cocoa

var vars1:String? = nil
vars1="hello http://blog.yahui.wang"
  print(vars1)
if vars1 != nil {
    print(vars1!) //强制获取值
}else{
    print("字符串为 nil")
}

执行结果:

Optional("hello http://blog.yahui.wang")
hello http://blog.yahui.wang

自动解析值

!?

?

上面我们说到 这两种声明方式是一样的
var optionalInteger: Int?
var optionalInteger: Optional
查看Optional的文档可以知道Optional只是一个枚举
enum Optional : LogicValue, Reflectable
也就是说当你使用var varS: String?的时候 你是“申明了一个Optional类型值,它可能包含一个String值,也可能什么都不包含”
不要以为是 “我声明了一个Optional的String值”

!

一下代码意义一样
var optionalInteger: Int! //!相当于下面这种写法的语法糖
var optionalInteger: ImplicitlyUnwrappedOptional

Implicitly Unwrapped Optionals, 直译就是隐式拆包的Optional,也就是说每次使用这个值的时候都会自动在变量后面加上个!拆包,当值为nil的时候 肯定会报错

那么!大概也有两种使用场景
1.强制对Optional值进行拆包(unwrap)
2.声明Implicitly Unwrapped Optionals值,一般用于类中的属性

执行流控制

条件语句

if … else

switch

循环

for

for in

while

repeat while

循环控制

continue

break

fallthough

字符串和字符

数组

字典

函数

函数

闭包

枚举

结构体和类

共同点

  1. 定义属性用于存储值
  2. 定义方法用于提供功能
  3. 定义附属脚本用于访问值
  4. 定义构造器用于生成初始化值
  5. 通过扩展以增加默认实现的功能
  6. 符合协议以对某类提供标准功能

    类还有如下的附加功能:

  7. 继承允许一个类继承另一个类的特征
  8. 类型转换允许在运行时检查和解释一个类实例的类型
  9. 解构器允许一个类实例释放任何其所被分配的资源
  10. 引用计数允许对一个类的多次引用

    属性

    存储属性

    延迟存储属性

    实例化变量

    计算属性和只读计算属性

    只有 getter 没有 setter 的计算属性就是只读计算属性。

    属性观察器

    全局变量和局部变量

    类型属性

    获取和设置类型属性的值

    方法

    下标脚本

    继承

    构造过程和拆构过程

    构造过程是类初始化
    拆构过程是类被释放时执行

    可选链

    ARC 自动引用计数

    类型转换

    扩展

    协议

    访问控制

    泛型