swift -- 基础
swift -- 基础
1.常量和变量
常量: let
变量: var
2.声明常量和变量
常量的声明: let
let a = 1 //末尾可以不加分号,等号两边的空格必须对应(同时有/没有)
变量的声明: var
var b = 2
b = 3 //更改值
3.类型的标注
var c : Int = 4
var d : Double = 3.1415926
var f : Character = "a" //单个字符 也用双引号 ""
var g : String = "asdf" //不同于OC ,不在需要@
4.命名
//同OC:不能以数字开头,不能使用特殊符号,不能使用关键字
let abc = 2
let 🐱 = 3
let 中国 = 4 //可以使用中文
5.输出
print(abc,中国) //直接输出变量/常量名,不需要@ 和双引号""
拼接格式: "反斜线+ 括号" \( )
print ("中国是:\(中国)")
6.注释方式
同OC
7.分号
//swift中,当一行上只有一条代码时:分号;可以写,也可以不写
//当一行上有多条代码:分号必须写
var g = 5; var h = 6
//8.整数及 浮点数
//整数
let i : Int = 10
//浮点数
let j : Float = 6.77
let k : Double = 9.88
//9.类型安全及类型判断
//swift中自动判断数据类型,不会将一个错误的类型传给我们使用
var i = 7 //默认是int
var pi = 3.144444444444 //默认是double
var q = "u" //默认是string
//let ss = i * 3.14 会报错,连个不同类型的操作,不可以
//10.数据类型转换(整数与浮点数的转换/字符串与整数的转换)
//整数与浮点
//将类型写在前面,将想要转换的变量用小括号括起来
var w = Double(i)
var ff = Double(i) * 3.14 //只有相同的类型,才能一起操作
var piInt = Int(pi)
//字符串与整数的转换:要求做到有意义的转换
//let str1 = Int("asdfasdf") //无意义
let str1 = Int("123456")
11.类型别名
typelias char = Character //新名为char
var ch1 : char = "a"
12.布尔类型 BOOL (true false)
var bool : BOOL = true
13.元祖(不同于数组,元祖类型可以不同,元素个数最好不要大于7 )
声明元祖
方式一:
let yuanzu = (404,"NotFound")
方式二:
let (a,b) = (123,"abc")
14.可选类型 ?
//在声明可选类型时,将问号? 放到类型的后面,则将变量设置成可选类型. 可选类型的变量默认值为nil(只有可选类型的变量才能为nil)
var optional : Int ? // ? 代表可选的,可以不赋值
var optional : Int ? = 10 //赋值
15.强制解析
//将一个可选类型的变量,转换成一般类型的变量,才能使用:取值的时候,在变量后面加上感叹号!
print(optional ! )
16.可选绑定
// let 名 = 之前的一个可选类型的变量
if let x = optional{
print(x)
}else{
print("空")
}
17.隐式解析 可选类型
//将一个可选类型的对象,变为一个可以进行自动解析的可选类型,其实就是将 ! 在声明时候放到类型的后面,而不是在取值的时候放到对象的后面
// ? 可以为nil
// ! 必须有值,不能为nil
var int12 : Int! = 12
print(int12) //取值的时候就不需要加 !
//18.使用断言进行调试 assert
//断言,只是做辅助调试使用,没有实际意义
//当条件成立,代码继续向下执行,不影响整体工程;条件不成立,运行时会崩溃到这里
var int13 : Int = 13
assert(int13 < 100) //该条件成立,则会继续向下执行
print("adfasdf")
19.运算符
1.赋值运算符
2.算术运算符
//取余运算可有对小数取余
let yushu = 5.5%2.5
3.组合赋值运算符 += -=
4.比较运算符 < > >= <=
5.三目运算符 条件?答案一:答案二
6.空合运算符 可选对象一??可选对象二
当可选对象一 为nil时,选择可选对象二使用 ,如果可选对象一有值,使用可选对象一
var kong1 : Int?
var kong2 : Int? = 6
let kong3 = kong1 ?? kong2
print(kong3)
7.区间运算符 ...三个点
1...5 //代表1,2,3,4,5
8.半开区间运算符 ..<
1..<5 //代表1,2,3,4 不包含5
//9.逻辑运算符 && || !
//swift3.0 补充**************************************************8
//1.可选项为空 的判断解决
//每次解析前用 if 或者用 ??(三目运算) 判断,防止崩溃
func demo(x:Int?,y:Int?) {
// let x:Int? = 10;
// let y:Int? = 200
//强制解包有风险
//1.判断
if x != nil && y != nil {
print(x! + y!)
}else{
}
//2. ?? 相当于一个简单的三目
print((x ?? 0) + (y ?? 0))
}
//使用 ! 强制解析, 有风险,如果为空,则崩溃
//有以下两种方式:(不需要强制解析)
一. if let/var 连用,判断对象是否为nil,不需要强制解析
func demo2() {
let oName:String? = "laowang";
let oAge:Int? = 11
if let name = oName,let age = oAge {
print(name + String(age))
}
}
二,guard ler/var (与if let 相反)
//guard 守卫(一定有值,没有值返回)
func demo3() {
let oName:String? = "laowang";
let oAge:Int? = 11
guard let name = oName, let age = oAge else{
print("nil")
return;
}
//代码若执行到这里,一定有值,前面guard 已经做了判断
print(name + String(age))
}