美文网首页
class的属性和方法

class的属性和方法

作者: BetterComingDay | 来源:发表于2017-03-23 22:50 被阅读17次

一、属性

1、存储属性

存储属性就是存储特定类的一个常量或者变量

//这里的name,age就是存储属性
struct Person{
    let name:String
    var age:Int
}

2、懒存储属性

懒存储属性是指第一次调用的时候才会计算其初始值的属性,通过lazy来标识

class Person{
    //假如这个类初始化的时候是耗时操作
}

class PersonInfo{
    //懒加载的话不用初始化p属性的时候就穿件Person实例,可以等到用的时候再加载,
    //而且p并不是一定要用,这样即可以节省时间,又可以节省内存
    lazy var p = Person()
}

注意:必须将懒存储属性声明成变量,因为属性的值在实例构造完成之前可能无法得到,而常量属性在构造过程完成之前必须要有初始值,因此懒存储属性必须声明为变量。

3、计算属性

计算属性不存储值,而是提供了一个getter和setter来分别进行获取值和设置其他属性的值。getter、setter分别使用get、set关键字进行定义。

class Person{
    //age是存储属性
    var age:Int = 18
    //height是计算属性
    var height:Int
    {
        get{
            return 3;
        }
        set{
            age = newValue/2;
        }
    }
    //只读计算属性
    var height1:Int
    {
        get{
            return 3;
        }
    }
    //只读属性可以省略get
    var height2:Int
    {
        return 3;
    }
}
4、属性观察器

详见swift下标脚本语法、willSet、didSet方法

5、类型属性

类型属性用关键字static标识,可用class代替static关键字。类型属性属于类用(类名.属性)方式调用

class Person{
    static var age:Int = 18
}
print(Person.age)

二、方法

实例方法由对象调用,类型方法由类调用

1、实例方法
class Person{
    //无参无返回值
    func info(){
        print("hahaha")
    }
    //有参无返回值
    func info1(age:Int,name:String){
        print(age)
    }
    //无参有返回值
    func info2() -> String {
        return "我是返回值";
    }
    //有参有返回值
    func info3(name:String) -> String{
        return name;
    }
}

let p = Person()
p.info()
p.info1(age: 1, name: "我是名字")
print(p.info2())
print(p.info3(name: "我是info3"))

控制台输出值:

hahaha
1
我是返回值
我是info3
2、类型方法

类方法由类调用,仅此而已

class PersonInfo{
    static func sayHello(){
        print("hello")
    }
}
PersonInfo.sayHello()

控制台输出值:

hello

三、构造函数

构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为对象的属性设置初始值

Tips:Swift中类实例化之后,所有的存储型属性必须有值。

1、构造函数基础

创建类之后必定要实例化对象,现在有两种方法设置初始值。

//方法一:定义属性时赋初始值
class Person{
    var name:String = "我是张三"
    var age:Int = 16
}
var p = Person()
print(p.name)
//方法二:将属性值设置为Optional
class Person{
    var name:String?
    var age:Int?
}
var p = Person()
p.name = "name"
print(p.name!)

观察之后不难发现这两种方法设置初始值费时费力。由此引出构造函数

import UIKit
class Teacher : NSObject{
    var name:String
    
    //重写构造函数
    override init(){
        name = "dadada"
        super.init()
    }
}
var t = Teacher()
//t.name = "大老师"
print(t.name)
2、重载构造函数

重写:子类继承父类,重写父类的方法
重载:当前类中方法名相同,参数列表不同

class Student : NSObject{
    var name:String
    var age:Int
    //如果重载了构造函数,系统默认提供的构造函数就不能再被访问
    init(name:String, age:Int) {
        self.name = name
        self.age = age
    }
}
var s = Student(name:"zhng",age:14)
print(s.name)
3、指定构造函数与便利构造函数
//指定构造函数 是类中最主要的构造函数。一个指定构造函数将初始化类中提供的所有属性,并根据继承链往上调用父类的构造函数来实现父类的初始化
//便利构造函数是类中比较次要的、辅助型的构造函数。。可以定义便利构造函数来调用同一个类中的指定构造函数,并为其参数提供默认值。
//便利构造函数有以下几个特点
//1、只有便利构造函数中可以调用self.init()
//2、便利构造函数不能被重写或者使用super调用父类的构造函数
//3、不能被继承
class Per : NSObject{
    var name : String
    init(name:String) {
        self.name = name;
        super.init()
    }
    convenience override init() {
        self.init(name:"哈哈哈");
    }
    deinit {
        print("Per被销毁了")
    }
}

四、析构函数

在一个类的实例被释放之前,析构函数会被调用。deinit无参 无返回值。

class Per : NSObject{
    var name : String
    init(name:String) {
        self.name = name;
        super.init()
    }
    convenience override init() {
        self.init(name:"哈哈哈");
    }
    deinit {
        print("Per被销毁了")
    }
}
var pp:Per? = Per()
print(pp!.name)
pp = nil

控制台返回如下:

哈哈哈
Per被销毁了

相关文章

  • class的属性和方法

    一、属性 1、存储属性 存储属性就是存储特定类的一个常量或者变量 2、懒存储属性 懒存储属性是指第一次调用的时候才...

  • OC运行时

    我个人对OC的理解就是:动态获取OC Class的属性和方法,从而动态改变Class方法和属性。之前学习Java的...

  • 属性和方法

    属性和方法 class PyClass:... lesson = 'python'... def ...

  • es6 class实现静态属性、私有属性、方法

    1.class实现静态属性 参考:ES6 class 静态属性和私有方法 es6中实现了静态方法,但是没有静态属性...

  • 获得class对象

    getClass class属性 forName方法 获得Superclass Class b = (Class)...

  • 类和对象

    类=属性+方法 属性是信息,方法是动作 class 类的意思 如何定义类? class Students #定义...

  • OOP高级编程

    给类绑定属性和方法 绑定方法 通过slots变量,来限制该class能添加的属性; slots定义的属性仅对当前类...

  • 016_操作列表的属性和方法。

    namespace _016_操作列表的属性和方法 { class Program { sta...

  • Swift 类型属性、类型方法

    简述 Swift中的类型(class、struct、enum等)属性和类型方法分别属于静态属性和静态方法。这种类型...

  • Appium Python 常用元素定位方法&测试小米计算器实

    常用的元素定位方法 Uiautomator 定位 text属性的方法 class属性的方法 resourceId属...

网友评论

      本文标题:class的属性和方法

      本文链接:https://www.haomeiwen.com/subject/ihfxottx.html