swift学习:基础
常量和变量:
常量的值一旦设定就不能改,变量的值可改。
常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0
类型标注:
表示常量和变量存储的值的类型,如果不设定,那么就会根据之来进行类型推断。
var welcomeMessage: String
常量和变量的命名:
常量和变量的命名不能包含数字符号,箭头,保留字,连线和制表符,不能以数字开头,命名不能重复,不能改变其存储的值的类型,不能将常量好变量进行互换。
let π = 3.14159
var friendlyWelcome = "Hello!"
输出常量和变量:
println是一个用来输出的全局函数,输出的内容会在最后换行。
println(friendlyWelcome)
// 输出 "Hello!"
Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:
println("The current value of friendlyWelcome is \(friendlyWelcome)")
// 输出 "The current value of friendlyWelcome is Bonjour!
数值型类型转换:
要将一种数字类型转换成另一种,你要用当前值来初始化一个期望类型的新数字,这个数字的类型就是你的目标类型。
整数转换:
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
SomeType(ofInitialValue)是调用 Swift 构造器并传入一个初始值的默认方法。你并不能传入任意类型的值,只能传入UInt16内部有对应构造器的值。不过你可以扩展现有的类型来让它可以接收其他类型的值(包括自定义类型)
整数和浮点数转换:
整数和浮点数的转换必须显式指定类型。
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi 等于 3.14159,所以被推测为 Double 类型
浮点数到整数的反向转换同样行,整数类型可以用Double或者Float类型来初始化:
let integerPi = Int(pi)
// integerPi 等于 3,所以被推测为 Int 类型
当用这种方式来初始化一个新的整数值时,浮点值会被截断。也就是说4.75会变成4,-3.9会变成-3。
布尔值:
Swift有两个布尔常量,true和false
let orangesAreOrange = true
let turnipsAreDelicious = false
当你编写条件语句比如if语句的时候,布尔值非常有用:
if turnipsAreDelicious {
println("Mmm, tasty turnips!")
} else {
println("Eww, turnips are horrible.")
}
// 输出 "Eww, turnips are horrible."
元组:
元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型。
let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
可选类型:
在类型后加个“?”表示可选,表示可以有值,也可以没有值。
隐式解析可选类型:
“!”取值的时候一定要有值,不然运行时会报错。
let possibleString: String? = "An optional string."
println(possibleString!) // 需要惊叹号来获取值
// 输出 "An optional string."
两者的区别:
let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString) // 不需要感叹号
// 输出 "An implicitly unwrapped optional string."
断言:
可选类型可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能没办法继续执行。这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因。
你可以使用全局assert函数来写一个断言。向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示:
let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因为 age < 0,所以断言会触发
何时使用断言
当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:
- 整数类型的下标索引被传入一个自定义下标脚本实现,但是下标索引值可能太小或者太大。
- 需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
- 一个可选值现在是nil,但是后面的代码运行需要一个非nil值。