class的属性和方法

一、属性

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被销毁了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容