常见的Swift关键字
-
let- 定义常量,不可变,如果对let定义的常量重新赋值会报错,并提供Fix-it,变换为var -
var- 定义变量,可变,没有值更新会提示变换为let -
func- 函数方法标识 例如
func setName(name: String) {
self.userName = name
}
-
class- 定义一个类 例如
class Person:NSObject {
var name:String
init(name : String) {
self.name = name
}
}// 定义一个继承与NSObject 的Person 类
-
protocol定义协议
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}
-
throws抛出异常
enum PrinterError: Error {
case outOfPaper
case noToner
case onFire
}
func send(job: Int, toPrinter printerName: String) throws -> String {
if printerName == "Never Has Toner" {
throw PrinterError.noToner
}
return "Job sent"
}
-
inout- 将函数的参数以引用类型传递
let origin = 1
func setOrigin(int : inout Int) {
int = 200 // 改变int 地址 指向的值
}
setOrigin(int:&origin)
print(origin) // 此时origin = 200 ,
-
class,func修饰关键字
class
| 类型 | 文件内 | 模块内 | 其他模块 |
|---|---|---|---|
| open | 可访问和继承 | 可访问和继承 | 可访问和继承 |
| public | 可访问和继承 | 可访问和继承 | 可访问,不可继承 |
| internal | 可访问和继承 | 可访问和继承 | 不可访问和继承 |
| fileprivate | 可访问和继承 | 不可访问和继承 | 不可访问和继承 |
| private | 可访问和继承 | 不可访问和继承 | 不可访问和继承 |
func
| 类型 | 文件内 | 模块内 | 其他模块 |
|---|---|---|---|
| open | 可访问和重载 | 可访问和重载 | 可访问和重载 |
| public | 可访问和重载 | 可访问和重载 | 可访问,不可重载 |
| internal | 可访问和重载 | 可访问和重载 | 不可访问和重载 |
| fileprivate | 可访问和重载 | 不可访问和重载 | 不可访问和重载 |
| private | 可访问和重载 | 不可访问和重载 | 不可访问和重载 |
final修饰的func在任何地方都不能被重载,class默认使用internal
-
typealias- 指定将某个特定的类型通过typealias赋值为新名字,typealias不能将整个泛型类型进行重命名,在别名中引入泛型,也可以进行对应
typealias ii = Int
-
associatetype- 定义一个协议时,声明一个或多个关联类型作为协议定义的一部分将会非常有用。关联类型为协议中的某个类型提供了一个占位名(或者说别名),其代表的实际类型在协议被采纳时才会被指定。通过associatedtype关键字来指定关联类型。比如使用协议声明更新cell的方法:
//模型
struct Model {
let age: Int
}
//协议,使用关联类型
protocol TableViewCell {
associatedtype T
func updateCell(_ data: T)
}
//遵守TableViewCell
class MyTableViewCell: UITableViewCell, TableViewCell {
typealias T = Model
func updateCell(_ data: Model) {
// do something ...
}
}
-
lazy- 懒加载,需要的时候才加载
lazy var type = 1
lazy var person : Person = {
let p = Person()
return p
}()
-
defer- 在当前声明的作用域最后执行 -
@noescape- 非逃逸闭包,闭包在函数执行完后才被调用,已被弃用 -
@esacping- 逃逸闭包,调用的地方超过了函数范围 -
return- 不解释










网友评论