二、基本数据类型

时间:2022-02-07 17:27:03

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)
}

 

参考https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID60