Swift学习笔记——基础语法
本文是针对新手学习Swift笔记,记录学习过程的一些体会以及一些学习过程中的理解:
基础语法
第一次接触Swift或者Oc语法的时候,总感觉有点像脚本语言,不像Java或者C/C++。当然这也只是个人的体会而已。
- 常量和变量
比较容易理解:下面这段代码分别定义类一个常量maximumNumberOfLoginAttempts和一个变量currentLoginAttempt。关键字分别是let和var。let这个与java final,C/C++的const相同功能。Swift var关键字可以通过推断来判别变量的类型(当然你也可以直接声明变量的类型,代码welcomeMessage就是标注了类型(String))。
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0
var welcomeMessage: String
基本类型
基本类型包含Int,Float,Double,String等类型。
Swift 提供了8, 16, 32和64位的有符号和无符号整数类型(UInt8,Int8; UInt16,Int16; UInt32,Int32; UInt64,Int64)特别的:- 在32位平台上, Int 和 Int32 长度相同。
- 在64位平台上, Int 和 Int64 长度相同。
- 在32位平台上,UInt 和 UInt32 长度相同。
- 在64位平台上, UInt 和 UInt64 长度相同。
浮点类型比整数类型表示的范围更大, 可以存储比Int类型更大或者更小的数字。 Swift 提供了两种有符号浮点数类型:
Double——表示64位浮点数,当你需要存储很大或者很高精度的浮点数时请使用此类型;
Float——表示32位浮点数,精度要求不高的话可以使用此类型。类型转换
类型转换比较简单,举例子来说:
var a = 3.14; // a is float
var b = Int(a); // b = 3 is Int
- 类型别名
关键字typealias 是类似于C/C++中的typedef,可以定义类型。
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound = 0
- 元组
在java,C/C++中没有这个概念,Swift或者Oc中有元组这种数据类型。元组( tuples) 把多个值组合成一个复合值。 元组内的值可以是任意类型, 并不要求是相同类型。从下面例子看,元组有点类似Java中Map。当然这个只是说可以包含多种类型的数据。元组具有和下标配合使用等特性
let http404Error = (404,"Not Found")
// http404Error 的类型是 (Int,String), 值是 (404,"Not Found")
let (statusCode,statusMessage) = http404Error
println("The status code is \(statusCode)")
// 输出 "The status code is 404"
println("The status message is \(statusMessage)")
// 输出 "The status message is Not Found"
let (justTheStatusCode,_) = http404Error
println("The status code is \(justTheStatusCode)")
println("The status code is \(http404Error.0)")
// 输出 "The status code is 404"
println("The status message is \(http404Error.1)")
// 输出 "The status message is Not Found"
let http200Status = (statusCode: 200,description: "OK")
println("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
println("The status message is \(http200Status.description)")
// 输出 "The status message is OK"
- 可选类型
可选类型是Swift一种独有特性,Java,C/C++以及OC都不包含这个特性。使用可选类型( optionals) 来处理值可能缺失的情况。 可选类型表示:
- 有值, 等于 x
- 没有值
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
if convertedNumber {
println("\(possibleNumber) has an integer value of \(convertedNumber!)")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
// 输出 "123 has an integer value of 123"
- 可选绑定
使用可选绑定( optional binding) 来判断可选类型是否包含值, 如果包含就把值赋给一个临时常量或者变量。 可选绑定可以用在 if 和 while 语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
if let constantName = someOptional {
statements
}
if let actualNumber = possibleNumber.toInt() {
println("\(possibleNumber) has an integer value of \(actualNumber)")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
// 输出 "123 has an integer value of 123"
- nil
你可以给可选变量赋值为 nil 来表示它没有值:
var serverResponseCode: Int? = 404
// serverResponseCode 包含一个可选的 Int 值 404
serverResponseCode = nil
// serverResponseCode 现在不包含值
var surveyAnswer: String?
// surveyAnswer 被自动设置为 nil
- 隐式解析可选类型
隐式解析可选类型是把想要用作可选的类型的后面的问号( String? ) 改成感叹号( String! ) 来声明一个隐式解析可选类型。可以把隐式解析可选类型当做一个可以自动解析的可选类型。 你要做的只是声明的时候把感叹号放到类型的结尾, 而不是
每次取值的可选名字的结尾。
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."
至此基础语法部分差不多完了,其他一些不重要的,或者说其他语言都有的,就没有叙述。下一节将讲述基本运算符。