Canoe

基础部分(Swift笔记)

2017.07.19

常量和变量

如果你的代码中有不需要改变的值,请使用let关键字将它声明为常量。只将需要改变的值声明为变量。

let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0 

快速定义多个相同类型变量
var red,green,blue: Double


注释

//这是一个注释

这是一个,
多行注释
/* 这是第一个多行注释的开头
/* 这是第二个被嵌套的多行注释 */
这是第一个多行注释的结尾 */

类型安全和类型推断

let mean = 42
//mean 会被推测为Int类型

let pi = 3.14.159
//pi 会被推测为double类型

类型别名

_类型别名(type aliases)_就是给现有类型定义另一个名字。你可以使用typealias关键字来定义类型别名。
typealias AudioSample = UInt16


布尔值

swift有两个布尔常量,truefalse


元组

_元组(tuples)_把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
let error = (404,”NOT Found”)
当只需要一部分的元组值,分解的时候把忽略的部分用下划线(_)标记:
let(justTheStatueCode,_) = error
还可以通过下标来访问元组中的单个元素,下标从零开始:

print("The status code is \(error.0)")
// 输出 "The status code is 404"
print("The status message is \(error.1)")
// 输出 "The status message is Not Found"
你可以在定义元组的时候给单个元素命名:

let http200Status = (statusCode: 200, description: "OK")
给元组中的元素命名后,你可以通过名字来获取这些元素的值:

print("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
print("The status message is \(http200Status.description)")
// 输出 "The status message is O

元组适用于临时组织值,不适合创建复杂的数据结构


可选类型

使用可选类型来处理值可能缺失的情况。
可选类型表示:

  • 有值,等于x

_或者_

  • 没有值

Int? 表示包含的值是可选类型,也就是说可能包含Int值也可能不包含值(nil)。

注意:

Swift 的 nil 和 Objective-C 中的 nil 并不一样。在 Objective-C 中,nil 是一个指向不存在对象的指针。在 Swift 中,nil 不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为 nil,不只是对象类型。

if语句和强制解析

if someValue != nil来判断是否有值
如果确定有值,使用someValue!来获取值,惊叹号表示一定有值,称为可选值的强制解析。

可选绑定

使用_可选绑定(optional binding)_来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 if 和 while 语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。

if let constantName = someOptional{
        //如果someOptional存在就赋值给constantName
}

隐式解析可选类型

隐式可选类型是在第一次赋值过后,可以确定一定会有值。
(String?)改成感叹号(String!)来声明一个隐式解析可选类型。
下面的例子展示了可选类型 String 和隐式解析可选类型 String 之间的区别:

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要感叹号来获取值(强制解析)

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString  // 不需要感叹号

错误处理

使用_错误处理(error handling)_来应对程序执行中可能遇到的错误。

func canThrowAnError() throws {
    // 这个函数有可能抛出错误
}

一个函数可以通过在声明中添加throws关键词来抛出错误消息。当你的函数能抛出错误消息时, 你应该在表达式中前置try关键词。

do {
    try canThrowAnError()
    // 没有错误消息抛出
} catch {
    // 有一个错误消息抛出
}

断言

断言会在运行时判断一个逻辑条件是否为 true。从字面意思来说,断言“断言”一个条件是否为真。你可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。如果条件判断为 true,代码运行会继续进行;如果条件判断为 false,代码执行结束,你的应用被终止。

let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因为 age < 0,所以断言会触发 

在这个例子中,只有 age >= 0 为 true 的时候,即 age 的值非负的时候,代码才会继续执行。如果 age 的值是负数,就像代码中那样,age >= 0 为 false,断言被触发,终止应用。

注意:

当代码使用优化编译的时候,断言将会被禁用,例如Xcode默认target release配置选项来build时,断言会被禁用。

使用场景

  • 整数类型的下标索引被传入一个自定义下标实现,但是下标索引值可能太小或者太大。
  • 需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
  • 一个可选值现在是 nil,但是后面的代码运行需要一个非 nil 值。
Comments
Write a Comment