Swift中的计算机属性setter/ getter

1. 仿照OC 来写set/get方法

import UIKit

class Person: NSObject {

    private var _name: String?
    
    // 仿照 OC来写get/set  这种方式几乎不用
    // 格式: 属性声明之后 + {set/ge} 
    var name: String?{
        
        // 仿照OC中, get方法返回带有下划线的成员变量!
        // 在Person类中, 没有带有下划线的成员变量, 那我们就自己声明一个.
        // 仿照OC中, 在外界无法使用 点语法, 点出带有下划线的成员变量, 这里就需要添加 private关键字来修饰
        // private: 私有的, 用来修饰属性或者方法, 告知属性或方法只能在其类内部使用.
        get{
            return _name
        }
        
        // 仿照OC中, set方法就是对带有下划线的成员变量进行赋值
        // 这种方法里系统默认就会提供 newValue, 也就是外界给赋的值
        set{
            _name = newValue
        }
    }
}

2. 只读属性的写法

import UIKit

class Person: NSObject {
    
    var name: String?
    
    // 只读属性写法 01
    var title: String?{
        get{
            // 这种情况, 当外界为name赋值之后, 打印title就会出现错乱的状态
            // 打印结果: Optional("我叫Optional(\"Tom\")")
            // 原因: 第一个Optional 是因为title为可选值; 第二个Optional 是因为name为可选值;
//            return "我叫" + "\(name)"
            
            // 这种情况, 不管外界对name赋值与否, 都能正常打印了
            // 打印结果: Optional("我叫Tom")
            return "我叫" + "\(name ?? "")"
        }
    }
    
    // 注意: 当一个属性为 只读属性时, get{} 可以省略不写, 因此可以得出:
    // 只读属性写法 02 
    var title2: String?{
        return "我叫" + "\(name ?? "")"
    }
}

3. 存储型属性和计算型属性

/*
 - 存储型属性 既能存又能取, 需要开辟内存空间.
 - 计算型属性 只能取(只能读), 执行函数时直接返回其他内存地址; 自己不分配独立空间保存计算结果, 每次执行都会被调用.
 */

4.计算型属性和懒加载

import UIKit

// 懒加载(lazy) 和 计算型属性(只读属性) 写法有点相似...
class Person: NSObject {
    
    var name: String?
    
    /* 懒加载
     1. 在第一次调用时, 执行闭包, 并且分配空间存储闭包返回的数据值.
     2. 会分配独立的存储空间.
     3. 与OC 不同的是, 即便初始化结果为nil, 也算初始化成功, 再也不会被调用了.
     */
    lazy var title: String = {
        
        return "我叫" + "\(name ?? "")"
    }()
    
    /* 计算型属性
     1. 只读
     2. 不分配独立存储的控件保存计算结果
     3. 更像一个函数, 不过不能接受参数,但必须要有返回值
     */
    var title1: String?{
        return "我叫" + "\(name ?? "")"
    }
}

5. as! (类型的强转)

    // 以tableView初始化cell为例
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        // as! 肯定可以转成我想要的类型 相当于OC中(PersonCell *)
        let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier", for: indexPath) as! PersonCell
        return cell
    }

6. description (通过自定义模型来理解)

import UIKit

/* description
 OC 中 是一个方法
 Swift中 是一个属性,一个只读属性, 打印模型属性时候使用方便一点
 */
class PersonModel: NSObject {
    
    var name: String?
    var age: Int = 0
    
    // kvc构造函数 - 在这里是原生的字典转模型
    init(dict:[String: Any]) {
        super.init()
        setValuesForKeys(dict)
    }
    
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        
    }
    
    // swift中写法
    override var description: String{
        // keys
        let keys = ["name", "age"]
        return dictionaryWithValues(forKeys: keys).description
    }
    
    // 外界打印模型的时候, 结果: ["name": Tom, "age": 18]
}

7. didSet

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

推荐阅读更多精彩内容