常量
只能赋值一次
它的值不要求在编译时期确定,但使用之前必须赋值一次
var num = 10
num += 20
num += 30
let a = num
在这个例子中,在编译阶段,我们是无法知道a的值是多少的,在其他的语言里,多数都要求编译阶段就要确定值
常见数据类型

在Swift里,主要就是两种类型,做了一个归类,并不会像OC那样
类型转换

元组
let error = (404,"Not Fount")
如何取值
error.0取第一个404
error.1取第二个"Not Found"

流程控制
for
let names = ["anna","alex","brian","jack"]
for i in 0...3 {
print("names[i]");
}
a...b,闭区间运算符,包括a也包括b
let range = 1...3
for i in range {
print(names[i])
}
let a = 1
let b = 2
for i in a...b {
print(names[i])
}
for i in a...3 {
print(names[i])
}
for _ in 0...3 {
print("123" )
}
半区间运算符
for i in a..<5 {
print(i);
} // 1 2 3 4
for -区间运算符用在数组上
let names = ["Anna","Alex","Brian","Jack"]
for name in names[0...3] {
print(name)
} // "Anna","Alex","Brian","Jack"
单侧区间:让区间朝一个方向尽可能的远
for name in names[2...] {
print(name)
} // Brian Jack
for name in names[...2] {
print(name)
} // Anna Alex Brian
for name in names[..<2] {
print(name)
} // Anna Alex
let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-3) // true
区间类型
let range1:CloseRange<Int> = 1...3
let range2:Range<Int> = 1..<3
let range3:PartialRangeThrough<Int> = ...5
字符/字符串也能使用区间运算符,但默认不能用在for-in中
let stringRange1 = "cc"..."ff" //CloseRange<String>
stringRange1.contains("cb") // false
stringRange1.contains("dz") // true
stringRange1.contains("fg") // false
let stringRange2 = "a"..."f"
stringRange2.contains("d") // true
stringRange2.contains("h") // false
// \0到~囊括了所有可能要用到的ASCII字符
let characterRange: CloseRange<Character> = "\0"..."~"
characterRange.contains("G") // true
Switch
fallthrough贯穿效果
var number = 1
switch number {
case 1:
print("number is 1")
fallthrought
case 2:
print("number is 2")
}
一般情况是不会打印"number is 2"的,但是加了fallthrough可以实现贯穿
Switch必须保证能处理所有情况,在上面那个例子中,只处理了1的情况,编译器是会报错的
如果想不报错,需要加上default:break
网友评论