常见的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
- 不解释