swift-基础语法

Posted by sunzhongliang on October 20, 2019

swift 简介

swift是Apple在2014年6月的WWDC上发布的一门全新的编程语言,从swift1.x发展到swift5.x(截止到2019年6月,最新版本是swift5.1),经历了多次重大的改变,ABI终于稳定,意味着以后的语法/特性不会发生大的改变.
swift是完全开源的:https://github.com/apple/swift 主要采用C++编写

ABI(Application Binary Interface):应用程序二进制接口
应用程序与操作系统之间的底层接口
涉及的内容有:目标文件格式、数据类型的大小/布局/对齐、函数调用约定等

常见数据类型

值类型(value type) 枚举(enum) Optional
结构体(struct) Bool、Int、Float、Double、Character
String、Array、Dictionary、Set
引用类型(reference type) 类(class)

整数类型:Int8(占用8位,1个字节)、Int16(占用16位,2个字节)、Int32(占用32位,4个字节)、Int64(占用64位,8个字节);无符号整数类型:UInt8、UInt16、UInt32、UInt64
在32bit平台,Int等价于Int32;在64bit平台,Int等价于Int64
整数的最大\小值:UInt8.max、Int16.min
一般情况下,都是直接使用Int即可
浮点类型:Float,32位,精度只有6位;Double,64位,精度最少15位

// 布尔
let bool = true  // 取反就是false

// 字符串
let name = "张三"

// 字符(可存储ASCII字符、Unicode字符)
let character: Character = "🐂"

// 整数
let age1 = 11
let age2 = ob10001  // 二进制
let age3 = 0o21 // 八进制
let age4 = 0x11 // 十六进制

// 浮点数
let doubleDecimal = 125.0 // 十进制,等价于1.25e2(1.25乘以10的二次方); 0.0125等价于1.25e-2(1.25乘以10的负二次方)
let doubleHexadecimal1 = 0xFp2 // 十六进制,等价于15乘以2的二次方,相当于十进制的60.0
let doubleHexadecimal2 = 0xFp-2 // 十六进制,等价于15乘以2的负二次方,相当于十进制的3.75

// 数组
let array = [1,2,3,5,6]

// 字典
let dictionary = ["age":15, "height":220]

类型转换

// 整数转换
let int1: UInt16 = 2000
let int2: UInt8 = 1
let int3 = int1 + UInt16(int2) // 将int2转换为16位的int类型,两个16位的int类型就可以相加

// 整数、浮点数转换
let int = 3 
let double = 0.1415926
let pi = Double(int) + double // int和double类型相加,需要先进行转换
let intPi = Int(pi) 

// 字面量可以直接相加,因为数字字面量本身没有明确的类型
let result = 3 + 0.1415926

元组(Tuple)

元组是多种数据类型组合在一起的表现

// 定义元组
let http404Error = (404, "Not Found")
print("状态码是:\(http404Error.0)")

// 把已经存在的元组赋值给另外一个元组
let(statusCode, statusMessage) = http404Error
print("状态码是:\(statusCode)")

// 把已经存在的元组赋值给另外一个元组的时候,忽略掉某个值
let (justTheStatusCode, _) = http404Error // 下划线代表忽略掉元组的第二个值
print("状态码是:\(justTheStatusCode)")

// 定义元组的时候,设定key
let http200Status = (statusCode:200, descripton:"请求成功")
print("状态码是:\(http200Status.statusCode), 信息是:\(http200Status.descripton)")

整数和浮点数都可以添加额外的0或者下划线来增强可读性
100_000、1_000_000.000_000_1、000123.456

变量&常量

swift中用var定义变量,用let定义常量,编译器能自动推断出变量\常量的类型

let a = 10
let b = 20
var c = a + b
c += 20

print(c)

变量
变量在使用前必须赋值一次

// 此写法将不会编译通过(变量在使用前没有赋值)
var age: Int
print(age)

常量
let定义的常量,只能赋值一次,不要求在编译时期确定,但使用前必须赋值一次(同变量一样),如:

// 使用前赋值(正确)
let age2: Int
age2 = 20
print (age2)

// 常量不要求在编译时期确定(正确)
var x = 10 // 变量在运行过程中随时会发生变化
let xr = x 

// 此写法将不会编译通过(常量只能赋值一次)
age2 = 30

// 此写法将不会编译通过(常量在使用前没有赋值)
let age3: Int
print(age3)

// 此写法将不会编译通过(定义一个未赋值的常量的时没有给一个明确的类型)
let age4
age4 = 40

标识符

标识符(常量名、变量名、函数名)几乎可以使用任何字符
标识符不能以数字开头,不能包含空白字符、制表符、箭头等特殊字符

let 😁 = "ETMS"
var 你好 = 3

func 🐂☕️() {
    print(1)
}

本文首次发布于 孙忠良 Blog, 作者 [@sunzhongliang] , 转载请保留原文链接.