swift-01-基础语法

466 阅读5分钟

最近在学习swift,期间也看了很多教程和大神的博客,最后把笔记放这里,方便查看复习~

附上学习资料地址:w3cschool-Swift 教程YungFan大神的简书(推荐看一下,有些知识点总结地简直通俗易懂)

一、基础知识

1、swift与oc的区别

  1. 分号:swift不需要末尾添加分号,除非几行代码连写在一行的情况

  2. 空格格式:swift非常注重格式,a = 1b=2 注意等号两边空格的格式必须一致

  3. 方法调用:oc中[Person saveCall]; ;swift中person.saveCall类似oc的点语法

  4. 头文件:swift不需要导入头文件就可以引用其他类的方法和属性

  5. 枚举类型:可以简写,直接.枚举值

  6. self:在当前类中访问属性或者方法,可以省略self.

  7. 构造函数:oc中[[Person alloc] initWithName:xxx] -> swift中Person(name:xxx)

  8. #selector:oc中是@selector,swift中是#selector

2、类型安全

Swift是一个类型安全(type safe)的语言。
即:用var来声明了一个变量,只能修改对应类型下的值,不能修改数据类型。编译的时候会进行类型检查,不匹配的地方会报错。

var a = 12 
a = "hello"  //定义的是int类型,不能改变类型

3、类型推断

用let声明一个常量 或者 用var声明一个变量的时候,在直接赋值的情况下,可以它的省略类型。swift会通过类型推断来选择合适的类型

let a = 100 
let b = 3.14 
let c = "hello" 

注意:如果没有给浮点字面量标明类型,swift会自动推断为Double类型:

let a = 3.14159
print(type(of: a))//Double

let b = 3 + 0.14159
print(type(of: b))//Double

4、类型别名

与oc用法一样,但关键字使用 typealias来修饰

//声明
typealias abc = Int 
//调用
let a: abc = 100 

二、数据类型

1、整型

  • Int(有符号整形:正数、零、负数)
  • UInt(无符号整形:正数、零)

注意事项:

一般不需要设置特定的 Int8, Int16。只写一个 Int,长度与操作系统有关,好比在32位系统上,写一个 Int 就和 Int32 一样。 UInt 也一样

Int8, Int16, Int32, Int64 分别表示 8 位, 16 位, 32 位, 和 64 位的有符号整数形式。 
UInt8, UInt16, UInt32, UInt64 分别表示 8 位, 16 位, 32 位 和 64 位的无符号整数形式。  

整数范围:

可以通过 min 和 max 属性来访问每个整数类型的最小值和最大值:
let minValue = UInt8.min // 最小值是 0, 值的类型是 UInt8
let maxValue = UInt8.max // 最大值是 255, 值得类型是 UInt8

2、浮点

  • Double 代表 64 位的浮点数。
  • Float 代表 32 位的浮点数。

注意事项:

Double 有至少 15 位数字的精度,而 Float 的精度只有 6 位。具体使用哪种浮点类型取决于代码需要处理的值范围。在两种类型都可以的情况下,推荐使用 Double 类型。

3、布尔值

Bool,两个布尔常量:true、false

4、字符串&字符

  • 字符串:String
  • 字符:Character,指单字符

代码示例:

//写法1:常量 
let a:Int = 10 

//写法2:swift会进行类型推断,可以省略 
let b = 12 

//写法3:变量,可以修改值 
var c = 20 
c = 25 

let d:Float = 3.14 //指定Float类型
let e = 3.15 //默认Double类型
var f = 3.16 //默认Double类型
f = 3.17 

三、字面量

所谓字面量,就是指像特定的数字,字符串或者是布尔值这样,能够直接了当地指出自己的类型并为变量进行赋值的值。比如:

let aNumber = 3         //整型字面量
let aString = "Hello"   //字符串字面量
let aBool = true        //布尔值字面量
  • 整型字面量 整型字面量可以是一个十进制、二进制、八进制、十六进制常量
以下都是17的不同进制表示:
//十进制
let decimalInteger = 17 
//二进制,前缀:0b
let binaryInteger = 0b10001 
//八进制,前缀:0o
let octalInteger = 0o21 
// 16进制,前缀:0x
let hexadecimalInteger = 0x11
  • 浮点型字面量 组成:整数部分、小数点、小数部分、指数部分 默认是10进制,也可以用16进制(加前缀0x)

10进制和exp指数

十进制数与 exp  的指数,结果就等于基数乘以 10exp1.25e2 意味着 1.25 x 10^2, 或者 125.0 
1.25e-2  意味着 1.25 x 10^-2, 或者 0.0125 

16进制和exp指数

十六进制数与 exp 指数,结果就等于基数乘以2exp0xFp2  意味着 15 x 2^2, 或者 60.0 .
0xFp-2  意味着 15 x 2^-2, 或者 3.75 .

以12.1875为例

let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
注意:
数值类型的字面量,可以添加 0 或者 _ 来增加可读性

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

  • 字符串字面量 字符串型字面量中不能包含未转义的双引号 (")、未转义的反斜线(\)、回车符或换行符。

  • 布尔值字面量 布尔型字面量的默认类型是 Bool。布尔值字面量有三个值,它们是 Swift 的保留关键字:

true 表示真。
false 表示假。
nil 表示没有值。

四、常量

1、命名规则:

  • let修饰
  • 字母、下划线开头
  • 区分大小写,算2个变量
  • 可以使用简单的 Unicode 字符,如:汉子、表情
let a : Int = 10
let a = 10
let _a = 10
let view : UIView = UIView()

2、注意:

  • let修饰的,是不可变的
  • 我们用let修饰的常量是一个类, 我们可以对其所在的属性进行修改
  • 常量不可以修改的意思是指针不可以再指向其他对象但是可以通过指针拿到对象,修改其中的属性

五、变量

1、 命名规则:

  • var修饰
  • 字母、下划线开头
  • 区分大小写,算2个变量
  • 可以使用简单的 Unicode 字符,如:汉子、表情
var _a = "hello"
var b = "hello"
var B = "hello"
var 你好 = "hello"

2、 输出:

print(_a)
print(b)
print(你好)
print(_a,b,你好)
print("见面要说\(_a)")
    

3、注意:

  • 我们不会用var去引用一个类, 也没有必要
  • 为了更加安全,建议先定义常量,如果需要修改再修改为变量

六、特殊运算符

这里只说一个不太常见的:

  • ===!==:测试一个实例的运行时类型和它的编译时类型是否一致
if someInstance.dynamicType === someInstance.self {
    print("The dynamic and static type of someInstance are the same")
} else {
    print("The dynamic and static type of someInstance are different")
}