15 Swift 类的定义

2017-07-05  本文已影响45人  猴子的救兵520

主要内容

一. 类的介绍和定义

class 类名 : SuperClass {
    // 定义属性和方法
}

二. 如何定义类的属性

类的属性介绍

存储属性

class Student : NSObject {
    // 定义属性
    // 存储属性
    var age : Int = 0
    var name : String?

    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0
}

// 创建学生对象
let stu = Student()

// 给存储属性赋值
stu.age = 10
stu.name = "why"

stu.chineseScore = 89.0
stu.mathScore = 98.0

计算属性

class Student : NSObject {
    // 定义属性
    // 存储属性
    var age : Int = 0
    var name : String?
    
    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0
    
    // 计算属性
    var averageScore : Double {
        get {
            return (chineseScore + mathScore) / 2
        }
        
        // 没有意义,因为之后获取值时依然是计算得到的
        // newValue是系统分配的变量名,内部存储着新值
        set {
            self.averageScore = newValue
        }
    }
}

var stu = Student()
stu.chineseScore = 99.0
stu.mathScore = 97.0

// 获取计算属性的值
print(stu.averageScore)

类属性

class Student : NSObject {
    // 定义属性
    // 存储属性
    var age : Int = 0
    var name : String?
    
    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0
    
    // 计算属性
    var averageScore : Double {
        get {
            return (chineseScore + mathScore) / 2
        }
        
        // 没有意义.newValue是系统分配的变量名,内部存储着新值
        set {
            self.averageScore = newValue
        }
    }
    
    // 类属性
    static var corseCount : Int = 0
}

// 设置类属性的值
Student.corseCount = 3
// 取出类属性的值
print(Student.corseCount)

监听属性的改变

//  Person.swift

import UIKit

class Person : NSObject {
    var name : String? {
        // 可以给newValue自定义名称
        willSet (new){ // 属性即将改变,还未改变时会调用的方法
            // 在该方法中有一个默认的系统属性newValue,用于存储新值
            print("willSet name - " + (name ?? "name has no value"))
            print("willSet new  - " + (new ?? "new has no value"))
        }
        
        // 可以给oldValue自定义名称
        didSet (old) { // 属性值已经改变了,会调用的方法
            // 在该方法中有一个默认的系统属性oldValue,用于存储旧值
            print("didSet  name - " + (name ?? "name has no value"))
            print("didSet  old  - " + (old ?? "old has no value"))
        }
    }
    var age : Int = 0
    var height : Double = 0.0
    
}
//  MainViewController.swift

import UIKit

class MainViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let p : Person = Person()
        
        // 在赋值时,监听该属性的改变
        // 在OC中是通过重写set方法
        // 在swift中,可以给属性添加监听器
        p.name = "猴子的救兵"
        
        print("\n")
        
        p.name = "黑猫警长"
    }
}

两次修改 p.name 后的输出结果如下:

willSet name - name has no value
willSet new - 猴子的救兵
didSet name - 猴子的救兵
didSet old - old has no value

willSet name - 猴子的救兵
willSet new - 黑猫警长
didSet name - 黑猫警长
didSet old - 猴子的救兵

上一篇下一篇

猜你喜欢

热点阅读