計算屬性與封裝

我們在上課之前,一起來回顧一下以前曾提過的“SoC”的概念,我們說這個叫做“Separation of Concerns”,我把它翻譯為責任分離——即不同的部分專注於自己的那一部分。或者說一個對象完成一個目標。

這樣做的目標既讓代碼更加模塊化易於維護,也讓系統運行效率更高。所以說,我们要让对象之间的通信变得更加规范才行

数据隐藏

你去看看你在写代码时候用到的那些框架哪个给你直接展示了它里边的内容?它们都暴露了标准的接口给你就像是一个个的黑箱放进玻璃塑料还有电池一部相机就出来了

所以說,参照这样的规则我们在进行创建类的时候也要这么做

你愿意在讲台上才发现自己没穿裤子吗?

为了保证我们的代码足够健壮将尽可能多的属性标记为 私有 (private)是个不错的选择

我们一起来看个栗子

请问谁的手机可以拨打“-1”这个号码?

你写的轮子你写的程序不一定就会比这个手机的类健壮多少总有一些有心人在寻找类似这样的漏洞,所以說,我们应该避免这种情况比如说使用非负的“UInt”类型来搞定复数问题或者我们可以设定一个计算属性来避免直接操作类的属性

Swift 语言中的计算属性

除了属性Swift 语言还有用于代替 getter 和 setter 的计算属性它提供了一种只能用来操作其他数据而自身不能存储任何变量的属性其实就是一种方法的包装……总之这样用起来其实更方便了

生存週期

好了,说完了封装的概念我们再回过头聊一聊储存器中的值,我們都知道,变量可以放在各种地方来声明比如类的外边类的里边甚至方法里边对应这三个位置这些变量有着不同的意义

全局变量

声明在类之外的变量叫做全局变量这个东西会随着你程序的运行而放在内存当中——直到你关闭程序它才会被释放掉,所以說,使用全局变量要小心如非必要请不要使用

如果错误使用了全局变量会发生什么呢?

不会发生什么顶多就是程序越来越卡直到卡死不响应然后重新打开罢了

实例属性

声明在类之中的变量叫做实例的属性我们之前讨论的那些都是这个家伙它声明在类当中会随着对象的创建而放在堆里知道对象被释放掉它才会随着对象一起被垃圾收集器带走

局部变量

他被声明在方法当中一般我们不需要劳心费力地来给局部变量命名——因为它的存在时间太短啦——比如循环当中的计数器也是局部变量(毕竟那也是个方法)它随着方法的调用而被创建等到方法执行完毕从桟顶被弹出那么这个变量也就消失不见了

什么是桟?我们后边的课程会讲到现在你和它握个手就好了

生效范围

不同位置的变量有不同的名字它们的功能也不尽相同全局变量是全部类和方法都能够访问到的如果你要做点什么全局状态的保存那么全局变量是个不错的选择

而实例的属性就只能被自己的类中的方法来调用别的类想要调用那是不可能的事情——至于创建实例之后……记得我们说过封装吧?

局部变量则只能被这个方法内读取的到别的方法就不行了它生效范围最小存在的时间最短一般临时的小变量都是这样


 

这节课没有作业下节课我们做个游戏玩

由...出版 R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

加入對話

1 評論

您的電子郵件地址不會被公開. 必填字段標 *