1.class、struct、enum、typealias、protocol、extension
class:声明类或者类方法
class XPYPerson: NSObject {
class func eat() {
print("吃东西")
}
}
struct:声明结构体,结构体中可以有成员变量和成员方法,相当于轻量化的类,结构体中的成员变量一定要说明类型
struct XPYStudent {
var number: Int
var name: String
func learn() {
}
}
enum:声明枚举
enum XPYPosition: Int {
case positionUp
case positionDown
case positionLeft
case positionRight
}
typealias:相当于OC的typedef
protocol:声明协议
(1)定义已有基本类型别名和闭包(block)类型
typealias PersonHeight = Float //身高用基本类型Float
typealias PersonWeight = (_ weight: Float) -> Void //体重闭包
class XPYPerson: NSObject {
//PersonHeight使用
func getHeight(height: PersonHeight) -> PersonHeight {
return height
}
//PersonWeight使用
func weightHandler(weight: PersonWeight) {
}
}
//调用weightHandler方法
let person = XPYPerson()
person.weightHandler { (weight) in
print("体重%@kg", (weight))
}
(2)组合protocol
protocol changeHeight {
func didChangeHeight(height: Float)
}
protocol changeWeight {
func didChangeWeight(weight: Float)
}
//组合两个protocol
typealias changeProtocol = changeHeight & changeWeight
class XPYPerson: NSObject, changeProtocol {
//实现protocol方法
func didChangeHeight(height: Float) {
<#code#>
}
func didChangeWeight(weight: Float) {
<#code#>
}
}
extension:类似于OC中的category,但是比category更强大。扩展已有类、协议或结构体的方法、添加新的属性
class XPYPerson: NSObject {
}
// MARK: - XPYPerson添加方法
extension XPYPerson {
func run() {
print("添加run方法")
}
}
// MARK: - 添加时间计算属性
extension Int {
var second: Int {
return self
}
var minute: Int {
return self * 60
}
var hour: Int {
return self * 3600
}
}
2.let 和 var
let:声明常量,表示不可修改,但如果声明的是一个对象,对象中有可修改属性,则可以对该对象中的属性进行修改
var:声明可变的变量,表示可以修改
例:XPYPerson类包含let声明属性name和var声明属性age
3.open、public、internal、fileprivate、private
open:最高权限,声明的类可以被其他模块继承和访问,声明的方法可以被其他模块复写和访问
public:声明的类可以被其他模块访问,但不能被继承,声明的方法可以被其他模块访问,但不能被复写
internal:默认权限,声明的类、方法和属性可以在当前模块中被访问,其他模块不能访问
fileprivate:当前文件私有权限,声明的类、方法和属性可以在当前文件中被访问,超出当前文件不能访问
private:私有访问权限,声明的类、方法和属性只能在同一个文件并且同一个类型中访问(当前类包括extension)
4.final、override
final:声明的类不可被继承,声明的方法不能被重写,声明的属性在子类中不可被重写(不能修饰结构体和枚举)
override:重写方法或者属性
class XPYPerson: NSObject {
let name = "XLp"
var age = 26
//final修饰属性
final var job = "programmer"
class func eat() {
print("吃东西")
}
func sleep() {
print("睡觉")
}
//final声明方法
final func run () {
print("跑步")
}
}
//final声明类
final class XPYPeople: XPYPerson {
func walk(){
}
}
//错误提示:Inheritance from a final class 'XPYPeople'
//class XPYboy: XPYPeople {
//
//}
class XPYSomeone: XPYPerson {
//错误提示:Cannot override with a stored property 'job'
//override var job = ""
override func sleep() {
}
//错提示误:Instance method overrides a 'final' instance method
//override func run() {
//
//}
}