本文学习自《 The Swift Programming Language-swift2.0官方手册 中文版》的电子版
是记录自己的Swift学习历程、整理相关资料便于查看
学习Swift有一个很方便的工具playground
,可以同步输出执行代码后的结果,不用在每次打印输出
配置:
选择 New File
OK
简单值
使用let声明常量,使用var声明变量
var myVar = 45
myVar = 50
常量只可以赋值一次 也就是说你可以用常量表示某个只需要赋值一次,但需要使用很多次的值
let myLet = 60
练习:创建一个显示类型为Float且初始值为4的常量
let exp : Float = 4
值永远不会被隐式的转换成其他类型,如果需要转换类型,请显式转换
let label = "My age is "
var age = 22
let ageLabel = label + String(age)
把值转换成字符串更简单的方法:把值写到括号中,且在括号前加反斜杠
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples"
let fruits = "I have \(apples + oranges) fruits"
练习:使用()表示我的身高为175.5cm
let height : Float = 175.5
let myHeight = "My height is \(height)cm"
创建一个空数组或者字典,使用初始化方法
let emptyArray = [String]() //表明元素类型
let emptyDict = [String:Float]() //表明key和Value的类型
使用[]和[:]来创建空数组和空字典 并用下标或key来访问元素
var array = ["1","2","3"]
print(array[0])
array[2] = "change"
print(array[2])
var dict = ["name":"Unique","age":12]
dict["sex"] = "Man"
print(dict)
控制流
使用if和switch来进行条件操作,使用for-in、for、while、和repeat-while来循环
包裹条件和循环变量括号可以省略,但语句体的大括号是必须的
let numberArray = [78,45,12,56,89]
var teamScore = 0
for score in numberArray {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)
在if语句中,条件必须是一个BOOL表达式,不会隐形的与0做对比–这意味着像if score{…}这样的代码将会报错
你可以同时使用if和let来处理值缺失的情况
var optionalString : String? = "Hello"
print(optionalString == nil)
var optionalName :String? = "Unique"
var greeting = "Hello"
if let name = optionalName {
greeting = "Hello,\(name)"
} else {
greeting = "GOOD"
}
练习: 把optionalName改成nil,greeting会是什么?添加一个else语句,当optionalName是nil时给greeting赋一个不同的值
当变量的可选值是nil,条件会判断false,大括号的代码会被跳过。如果不是nil,会将值赋给let后面的常量,这样在代码块中就可以使用这个值了
switch支持任意类型的数据以及各种比较操作
let vegetable = "red pepper"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber","watercress":
let vegetableComment = "The would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Evenything tastes good in soup."
}
let x where x.hasSuffix(“pepper”) 是说vegetable的值是不是以”pepper”做后缀(也就是结尾) 是就赋值给常量 x
switch执行到匹配的子句之后,程序会退出switch语句,所以不必每个子句结尾都写break
for in 遍历
let interestingNumbers = [
"Prime" : [2,3,5,7,11,13],
"Fibonacci" : [1,1,2,3,5,8],
"Square" : [1,4,9,16,25]
]
var largest = 0
for (key,numbers) in interestingNumbers {
for number in numbers {
largest = number
}
}
print(largest)
先遍历字典取出每个数组 再遍历数组
使用while来重复运行一段代码直到条件不满足,循环条件也可以写在结尾,保证能至少循环一次
var n = 2
while n < 100 {
n = n * 2
}
print(n)
var m = 2
repeat {
m = m * 2
} while m < 100
print(m)
你可以在循环中使用..<来表示范围,也可以使用传统写法,二者等价
var firstForLoop = 0
for i in 0...4 {
firstForLoop += 1
}
print(firstForLoop)
使用..<创建的范围不包含上界,想要包含的话使用…