Swift笔记-可选链

使用感叹号(!)可选链实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person {
var residence: Residence?
}

class Residence {
var numberOfRooms = 1
}

let john = Person()

//将导致运行时错误
let roomCount = john.residence!.numberOfRooms

//fatal error: unexpectedly found nil while unwrapping an Optional value

想使用感叹号(!)强制解析获得这个人residence属性numberOfRooms属性值,将会引发运行时错误,因为这时没有可以供解析的residence值。

Swift笔记-析构过程

在一个类的实例被释放之前,析构函数被立即调用。

用关键字deinit来标示析构函数,类似于初始化函数用init来标示。析构函数只适用于类类型。

  • Swift 会自动释放不再需要的实例以释放资源。
  • Swift 通过自动引用计数(ARC)处理实例的内存管理。
  • 通常当你的实例被释放时不需要手动地去清理。但是,当使用自己的资源时,你可能需要进行一些额外的清理。

Swift笔记-继承

在 Swift 中,类可以调用和访问超类的方法,属性和下标脚本,并且可以重写它们。

基类

没有继承其它类的类,称之为基类(Base Class)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class StudDetails {
var stname: String!
var mark1: Int!
var mark2: Int!
var mark3: Int!
init(stname: String, mark1: Int, mark2: Int, mark3: Int) {
self.stname = stname
self.mark1 = mark1
self.mark2 = mark2
self.mark3 = mark3
}
}
let stname = "swift"
let mark1 = 98
let mark2 = 89
let mark3 = 76

let sds = StudDetails(stname:stname, mark1:mark1, mark2:mark2, mark3:mark3);

print(sds.stname)
print(sds.mark1)
print(sds.mark2)
print(sds.mark3)
//swift
//98
//89
//76

Swift笔记-下标脚本

语法

定义下标脚本使用subscript关键字,显式声明入参(一个或多个)和返回类型。

1
2
3
4
5
6
7
8
9
subscript(index: Int) -> Int {
get {
// 用于下标脚本值的声明
}
set(newValue) {
// 执行赋值操作
}
}

Swift笔记-方法

实例方法

在 Swift 语言中,实例方法是属于某个特定类、结构体或者枚举类型实例的方法。
实例方法提供以下方法:

  • 可以访问和修改实例属性
  • 提供与实例目的相关的功能

实例方法要写在它所属的类型的前后大括号({})之间。
实例方法能够隐式访问它所属类型的所有的其他实例方法和属性。
实例方法只能被它所属的类的某个特定实例调用。
实例方法不能脱离于现存的实例而被调用。

Swift笔记-属性

存储属性

1
2
3
4
5
6
7
8
9
10
11
12
13
import Cocoa

struct Number
{
var digits: Int
let pi = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.pi)")

Swift笔记-枚举

Swift 的枚举类似于 Objective C 和 C 的结构,枚举的功能为:

  • 它声明在类中,可以通过实例化类来访问它的值。
  • 枚举也可以定义构造函数(initializers)来提供一个初始成员值;可以在原始的实现基础上扩展它们的功能。
  • 可以遵守协议(protocols)来提供标准的功能。

语法

1
2
3
enum enumname {
// 枚举定义放在这里
}

Swift笔记-闭包

sorted 方法

排序闭包函数类型需为(String, String) -> Bool。

1
2
3
4
5
6
7
8
9
10
11
import Cocoa

let names = ["AT", "AE", "D", "S", "BE"]

// 使用普通函数(或内嵌函数)提供排序功能,闭包函数类型需为(String, String) -> Bool。
func backwards(s1: String, s2: String) -> Bool {
return s1 > s2
}
var reversed = names.sorted(by: backwards)

print(reversed)