zoukankan      html  css  js  c++  java
  • swift:入门知识之类和对象

    1、swift中使用class创建一个类。一个类的声明则是在类里作为常量或变量声明的,除了是在类的上下文中。在方法和函数中也是这么写的。

    2、swift中使用init(...)作为初始化构造函数

    3、swift中使用构造函数初始化成员变量时,格式为 : self.name = name.构造器的声明跟函数一样,除了会创建类的实例。每一个属性都需要赋值,无论在声明里还是在构造器里。

    4、swift中使用deinit来创建一个析构函数,由系统自动调用来撤销对象,进行内存的清理工作

    5、swift中子类继承父类时,一冒号:隔开。在继承标准根类时无需声明,所以你可以忽略超类

    6、swift中子类重写父类的方法时,必须使用关键词override重载超类中的实现,如果没有这个关键词,编译器会报错

    7、swift中可以设置get和set方法,例如如下所示:

    var perimeter: Double {

            //getter方法

            get{

                         return slideLength 

                 }

            //setter方法

            set{

                       slideLength = newValue/2

                }

    }

    具体举例如下:

    定义一个没有构造函数的类Shape 

    //声明一个没有构造函数的类
    class Shape{
        //成员变量,边数
        var numberOfSides = 0
        //成员方法
        func simpleDescripton()->String{
            return "A shape with (numberOfSides) sides."
        }
    }
    //创建对象
    var shape = Shape()      //{numberOfSides 0}
    //设置成员变量
    shape.numberOfSides = 4 
    //调用成员方法 shape.simpleDescripton() //"A shape with 4 sides"

     定义一个子类NameShape继承上面的父类Shape,子类带一个init构造函数和一个deinit析构函数

    //声明带构造函数的类,继承父类Shape
    class NameShape : Shape{
        //形状的名字
        var name:String
        
        //初始化方法
        init(name:String){
            self.name = name
        }
        
        //虚构方法,不可以显示调用,系统会在程序执行结束后自动调用,清理内存
        deinit{
            println("deinit")
        }
        
        //成员方法,重写父类的方法必须要加上关键字 override
        override func simpleDescripton()->String{
            return "A shape with name:(name) have (numberOfSides) sides."
        }
    }
    //创建对象,参数名不可以省略
    var nameshape:NameShape = NameShape(name:"rect") //{{numberOfSides 0} name"rect"}
    //设置成员变量
    nameshape.numberOfSides = 4      //{{numberOfSides 4} name "rect"}
    //调用成员方法
    nameshape.simpleDescripton()     //"A shape with name:rect have 4 sides"

    定义一个正方形类Square继承上面的父类NameShape,其实它也继承了根父类Shape,Square继承它父类所有公有的属性和方法,在初始化时,子类可以借助父类的初始化方法给它们共有的属性赋初值

    //继承父类NameShape
    class Square: NameShape {
        //边长
        var slideLength:Double = 0.0
    //子类自己的初始化方法 init(slideLength:Double,name:String) { self.slideLength = slideLength //调用父类的初始化方法 super.init(name: name) //直接用从父类继承的边数属性 numberOfSides = 4 } //设置对象的set和get方法 var perimeter: Double { //getter方法 get{ return slideLength } //setter方法 set{ slideLength = newValue/2 } } //定义求面积的方法 func area() -> Double{ return slideLength*slideLength } override func simpleDescripton() -> String { return "A shape with name:(name) have (numberOfSides) sides.its area is (area())" } } //创建对象时的参数名不可以省略 var square:Square = Square(slideLength:2,name:"正方形")
    square.perimeter = 6 square.simpleDescripton() //"A shape with name:正方形 have 4 sides .its area is 9.0"
    square.slideLength //3

    可以给参数的参数名再设置一个名字,函数内部使用参数的原始名,调用时使用设置参数名的名称,即外部名,前一章函数部分已经介绍过

    class Counter{
        var count:Int = 0
    //给第二个参数times再设置一个名称numberOfTimes,不过函数内部使用的还是times func incrementBy(amount: Int, numberOfTimes times: Int){ count += amount * times } } var counter = Counter() //创建一个对象

    //调用函数时,用的第二个参数的名称为numberOfTimes counter.incrementBy(
    2, numberOfTimes: 7) //14
  • 相关阅读:
    易错点集合
    [NOIP2014][题解]飞扬的小鸟
    [题解]P2014 选课-树型依赖的背包
    [题解]「一本通 1.3 练习 1」埃及分数
    【NOIP2015】斗地主 题解
    NOIP2015子串题解
    单人纸牌_NOI导刊2011提高(04) [题解]
    「一本通 1.3 例 5」weight 题解(玄学搜索对象)
    NOIP2017 跳房子题解
    P1850 换教室 题解
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4903057.html
Copyright © 2011-2022 走看看