二、基本数据类型
1.字符串输出
var str = "world" println("hello, \(str)")
2.类型别名
为已存在的类型定义另一个名字,类似于 typedef
typealias audioSample = UInt16
3.元祖 tuples
// 定义方式1 let http404Error = (404, "Not Found") let (statusCode, statusMessage) = http404Error let (justTheStatusCode, _) = http404Error //只有一个值 // 定义方式2 let http200Status = (statusCode: 200, descirption: "OK") // 访问方式1 println("\(statusCode), \(statusMessage)") // 访问方式2 println("\(http404Error.0), \(http404Error.1)") // 访问方式3 println("\(http200Status.statusCode), \(http200Status.descirption)")
4 可选值 Optionals
可选值表示要么是某个值,要没什么也没有
let possibleNumber = "123" var surveyAnswer : String?//默认为nil let converedNumber = possibleNumber.toInt()//converedNumber为可选值
可选值绑定 Optional Binding
if let actualNumber = converedNumber { println("\(possibleNumber) 有数字 \(actualNumber)") }else{ println("\(possibleNumber) 不能被转换为整形") }
4.1 nil
Object-C: nil表示一个指针,它指向一个不存在的对象
swift: nil表示某种类型的值,任何可选值类型和对象类型都可以设为nil
4.2 暗解包可选值 Implicity Unwrapped Optionals
//每次使用都要解包 let possibleString: String? = "An optional string." println(possibleString!) //无论是否被使用,都自动解包 let assumeString: String! = "An implicitly unwrapped optional string." println(assumeString)
5 断言 Assertions
断言在运行时检查某种情况是否为真,为真后面代码继续执行,为假后面代码不再执行。
let age = 3 assert(age >= 0, "age cannot be less than 0")
6 基本操作符
6.1 闭区间 Closed Range Operator (a...b),即数学上的[a, b]
for index in 1...5 {//[1, 5],包括1和5 println("\(index) times is \(5*index)") }
6.2 半包半闭区间 Half-Open Range Operator (a..<b),即[a, b)
let names = ["Anna", "Alex", "Brian", "Jack"] let count = names.count for i in 0..<count {//[0, count),包括0不包括count println("Person \(i + 1) is called \(names[i])") } // Person 1 is called Anna // Person 2 is called Alex // Person 3 is called Brian // Person 4 is called Jack
7. 字符串字面值 String Literals
var emptyString = String() if emptyString.isEmpty{ }
7.1 转义字符
\0 空字符
\\ 反斜线
\t 水平tab
\n 换行
\r return
\" 双引号
\' 单引号
7.2 swift 中字符串是值类型 Value Types
将字符串传递给函数时,或者用一个字符串给另一个字符串赋值时,传递的是字符串值的拷贝,而不是字符串的地址或引用。一个新的字符串的副本被创建了,这个新创建的副本而不是原字符串,传递给函数或其他字符串。这个副本的创建是懒加载的,必要时才会创建,所以效率很高。
注意这点与 Cocoa 中 NSString 的不同,NSString传递的是引用。
7.3 遍历String中的Character
String 中的每个字符都是单个的 Unicode 字符
for character in "abcdef"{ println(character) }
7.4 计算字符串中字符个数 countElements
let string = "abcdef" println(countElements(string))
7.5 字符串连接
let string1 = "hello" let string2 = "world" let character1: Character = "!" let multipier = 3 let stringPlusString = string1 + " " + string2 + String(character1) let message = "\(multipier * 2) times \(stringPlusString)"
7.6 字符串比较
if string1 == string2{ println("\(string1) 与 \(string2) 在相同的位置包含相同的字符") }
7.7 hasPrefix, hasSuffix
var hasPrefix: Bool = stringPlusString.hasPrefix(string1)
7.8 大小写转换
let upper = string1.uppercaseString
let lower = upper.lowercaseString
7.9 Unicode编码
Unicode 是一种国际编码,它可以通过标准的格式,表示任何语言的任何字符。在Unicode中,任何字符都能通过一个或多个unicode scalars(scalars: 标量,即非向量,只有数值大小,没有方向)表示。一个unicode标量是一个唯一的21-bit的number(或name),比如U+0061表示 LOWERCASE LATIN LETTER A ("a")。
Swift 的 String 和 Character 完全兼容 Unicode 编码,它支持一系列不同的Unicode编码。
UTF-8
通过字符 UTF8View 类型的 utf8 属性 获得字符的 utf8 表示
let dog = "Dog!" for codeUnit in dog.utf8{ print(codeUnit) }
UTF-16
for codeUnit in dog.utf16{ print(codeUnit) }
Unicode Scalars
通过字符 UnicodeScalarView 类型的 unicodeScalars 属性 获得字符的 UnicodeScalar 表示
for scalar in dog.unicodeScalars{ print(scalar) }