Swift主要关键字说明

9 篇文章 0 订阅
1 篇文章 0 订阅

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() {
    //
    //}
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值