Swift2.x 中类的计算属性set方法不能访问自身值
来源:互联网 发布:qq群成员提取软件 编辑:程序博客网 时间:2024/05/16 06:28
最近在学习swift2.x,在运用计算属性时出现了一些问题,例如下面这段代码:
import Foundationclass Test { var testVar:Int { get{ return self.testVar } set{ self.testVar = newValue } }}var t = Test()t.testVar = 2print(t.testVar)
它在编译时并不会报错,但是运行时会引起内存崩溃:
错误为:
warning: could not load any Objective-C class information. This will
significantly reduce the quality of type information available.
提示完全看不懂啊摔!-_-b,经过仔细排查原来内存泄露了,这一句
self.testVar = newValue
实际上形成了一个对属性testVar的递归调用,因此把代码修改为这样就行了:
import Foundationclass Test { var _testVar:Int = 0 var testVar:Int { get{ return self._testVar } set{ self._testVar = newValue } }}var t = Test()t.testVar = 2print(t.testVar)//这里可以访问_testVarprint(t._testVar)
但是我们发现_testVar属性也可以直接从外部被调用,这就破坏了封装原则,所以我们可以将类的定义放在second.swift中,然后把_testVar加上private修饰符即可:
second.swift
import Foundationclass Test { private var _testVar:Int = 0 var testVar:Int { get{ return self._testVar } set{ self._testVar = newValue } }}
main.swift
import Foundationvar t = Test()t.testVar = 2print(t.testVar)
然后此时再在main.swift中访问_testVar编译器就会报错了:
然而在swift官方文档中找到了这句:
也就是说计算属性本来设计时就不是用来存储值的…………..
那xcode为毛不在编译时就报错啊(#‵′)靠→_→
0 0
- Swift2.x 中类的计算属性set方法不能访问自身值
- swift2.x不能使用函数重载的问题
- get\set用来访问类的属性。
- 自动计算中引用自身单元格的值
- 自动计算中引用自身单元格的值
- 自定义数据类型 --- 类的属性和方法全解(swift2.3)
- 深入了解隐式属性和带实现值属性的区别(属性中get{},set{}访问器小解)
- Java中类的属性和方法的访问控制
- 为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
- 类的定义中不能包含其自身类型,但是能包含其自身的指针和引用类型
- 为什么类的定义中不能包含自身类型,而可以包含其自身的指针类型和引用类型
- php中类外部访问类私有属性的方法
- 子类会继承父类的私有方法和私有属性,只是不能直接访问
- Xslt中属性的访问方法总结
- 为什么子类不能访问基类的private成员(为什么要使用get,set方法)?为什么要这样设计?
- 类访问自身的私有成员
- Java中属性私有,使用get/set方法的目的
- calendar中set方法和静态属性带来的坑
- tyvj 2075 差分数组+二分
- [UnityShader2]图形学与CG基础
- iOS的观察者模式
- C语言第一篇:C语言博客书写规范
- PowerDVD14极致蓝光版注册激活补丁
- Swift2.x 中类的计算属性set方法不能访问自身值
- ClassLoader笔记
- java Annotation注解
- 未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e3
- 2016年央视315晚会互联网成重灾区!
- 本月有几天
- 11. Container With Most Water
- 子类对象的创建过程
- Android中使用XmlPullParser操作简单的xml文件