声明常量与变量
用let定义常量
用var定义变量
let a = 10
var b = 10
b = a + b
// b 为 20
类型标注
冒号 声明所属类型
常量和变量的名字几乎可以使用任何字符,甚至包括Unicode字符;
但是不能包括空白字符、数字符号、箭头、保留的(或者无效的)Unicode码位、连线和制表符。也不能以数字开头
let a : Int = 10
var hi : String = "Hello"
let 🐱 = "猫"
输出常量和变量
print(a)
print("我今年\(a)岁了")
// 输出 10
类型安全和类型推断
var str = "This is String"
//会自动识别str为String类型
元组
元组把多个值合并为一个单一的复合型的值。元组内的值可以是任何类型,而且可以不必是同一类型。
你可以用数字索引方式来访问单独的元素 或者 通过其名字来获取元素
let httpError = (404,"Not Found")
let http200Status = (statusCode:200,description:"OK")
print("your error code is \(httpError.0)")
print(" This status code is \(http200Status.statusCode)")
可选项
- 在定义变量时,如果指定是 可选的,表示该 变量可以有一个指定类型的值,也可以是nil
- 变量可选项的默认值是 nil
- 常量的可选项没有默认值,主要用于在构造函数中给常量设置初始数值
可选项在参与计算时,必须解包;”?“用于定义,”!“用于解包(强行从可选项中获取对应的非空值);但是如果变量真的是nil ,程序会崩溃
let x : Int? = 10
let y = 10
print(x! + y)
//输出20
let z : Int? = nil
print(z!)
//此时程序会崩溃
赋值运算符
赋值运算符 “=”可以初始化 或者更新 a为b的值
let a = 10
var b = 5
a = b
// a的值为 10
赋值元组
let (x, y) = (1,2)
//x等于1,同时y等于2
与Objective-C 和C不同,Swift的赋值符号自身不会返回值(怕与 “ == ”混淆),例如:
if x = y {
//这里是不合法的,因为x = y 并不会返回任何值。
}
三元条件运算符
三元条件运算符是一种有三部分的特殊运算,它看起来是这样的: question ? answer1 : answer2 。这是一种基于 question 是真还是假来选择两个表达式之一的便捷写法。如果 question 是真,则会判断为 answer1 并且返回它的值;否则,它判断为 answer2 并且返回它的值。
三元条件运算符就是下面代码的简写
if question{
answer1
} else {
answer2
}
举例:
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight is equal to 90
合并空值运算符
a ?? b ,表达式 a 必须是一个可选类型 如果可选项a有值则展开,若无,是nil,则返回默认值b。
合并空值运算符是下面代码的缩写
a != nil ? a! : b
上面代码中,三元条件运算符强制展开( a! )储存在 a 中的值,如果 a 不是 nil 的话,否则就返回 b 的值。合并空值运算符提供了更加优雅的方式来封装这个条件选择和展开操作,让它更加简洁易读。
注意:如果a是非空,则b不会被考虑,这就是所谓的“短路计算”
let userdefaulColor = "red"
var userColor :String ?
var color = userColor ?? userdefaulColor
// userColor为nil,则color 为red
区间运算符
闭区间运算符 (a...b)
半开区间运算符 (a..<b)
单侧区间运算符
let names = ["Jack","LPZ","HHH","Alex"]
let count = names.count
for i in 0..<count {
print (names[i]);
}
//从索引2 到数组结束
for name in names[2...] {
print(name)
// HHH
//Alex
}
//从0到索引 2
for name in names[...2] {
print(name)
// Jack
// LPZ
// HHH
}
网友评论