日常随笔第十弹-类/协议/拓展

1. 成员与类的权限

  • 权限:internal/pravite/public
  • 默认为internal:在当前应用或模块可见
  • pravite: 在当前文件中使用
  • public: 在其他地方都可见
  • 成员的权限不能超过类的权限

2. 类的封装

class hummen {//封装
    var name : String = ""
    var age : UInt = 0
    private var weight : Double = 0
    var height : Double = 0
}


var p3 = people()
p3.name = "李雪"
print(p3.name)

var p4 = p3
p4.height = 34
print(p4.height, p4.name)

class tangle {//可定义存储属性,也可定义计算属性
    var height : Double = 0
    var weight : Double = 0
    var name : String!{
    willSet(value){//储存属性
            print("将\(name)设置为:(value)")
        }
    didSet{
            print("已经设置为:\(name)")
        }
    }
    var area:Double{//计算属性
        set{
            height = sqrt(newValue)
            weight = sqrt(newValue)
        }
        get {
            return height * weight
        }
        //return height * weight
    }
    func same()  {
        print("this is the same")
    }
}

var t1 = tangle()
t1.height = 24
t1.weight = 5

t1.name = "张三"

print(t1.area)

3. 类的继承

  • swift中类的继承是单继承,只有一个父类,也可以没有父类
  • 可继承父类中所有的成员和方法
  • 也可以重新构造父类的方法
class rectangle: tangle {//继承tangle
    var width : Double = 0
    func diffrent() {
        print("this is diffrent")
    }
    override func same() {//重新构造父类的方法,需添加关键字override
        print("this the same")
    }
}
var re1 = rectangle()
re1.diffrent()
re1.same()

var re2 : tangle//声明为tangle类
re2 = rectangle()//re2实际为rectangle类,但是还是tangle类
var re3 = re2 as! rectangle//将re2强制转换为rectangle类
re2.same()
re3.diffrent()

4. 类的协议与扩展

4.1 协议的作用

  • 将不同父类的类通过一些描述特征将其归为一类进行管理

协议的定义

protocol extra {
    func condition()
}

协议的实现

class Clothes : extra{
    func condition() {
        print("Cloth is dry~")
    }
}

4.2 扩展的作用

  • 将已有的类型进行添加功能或是方法,也可以添加类的功能
  • 不能创建存储属性,只能创建计算属性

//也可以给类添加功能,“类型”没有局限
extension Int{//给已有类型添加功能,扩展Int类型中的某些功能,包括方法
    //var i = 123//不能创建存储属性,只能是计算属性
    var i : Int{
        return self * 2
    }
    func InfoPrint(number : Int, number1 :Int) -> Int {
        return number * self + number1
    }
}
var s = 123
print(s.i, s.InfoPrint(3, number1: 4))
extension Clothes {
    func condition() {
        print("Cloth is dry~")
    }
}

5. 计算符重载

  • 重新定义计算符,使其能在特定的函数中实现符号的功能
func 符号()->类型{}

你可能感兴趣的:(日常随笔第十弹-类/协议/拓展)