Swift的setter与getter

最近在公司闲来无事,就在网上找各种项目来学着做,基本都是OC的,然后自己差不多翻译成Swift。可是写着写着的时候发现自己Swift那个蛋疼啊,越来越感觉自己不懂Swift,所以写下一些本菜鸟碰到的一些问题与大家分享。

setter与getter算是比较蛋疼的问题了,因为之前习惯的OC的思维,所以老想着用OC的习惯去写setter和getter,于是就碰到了下面一些比较低级的错误了。

本菜鸟一开始以为是内存错误了于是开始一顿乱找,纠结半天之后发现原来是递归了,在前一句加上打印语句,

接着运行发现调试时打印如下

顿时脑海里想各种解决方法,无果(get这样也是同样的错误)。完全和OC的不一样的,不能用OC的习惯去写Swift。

然后在官方文档里看到有计算属性与存储属性这两个概念,顾名思义,计算属性不是用来存储变量或者常量的。结合网络上的各种方法,后得出一套解决方案。

定义两个变量。第一个用来做计算属性,并不存放具体的值,第二个才是存储属性。在计算属性中的setter里给存储属性赋值,getter里返回存储属性的值,运行结果如下

打印:

当然,真正应用中不会像这段示例代码那么简单,setter 与getter中肯定会做更多处理,这里只是给大家展示一下效果。如有说的不对的地方,跪求大神指教,希望对大家有所帮助!

时间: 2024-11-05 11:27:50

Swift的setter与getter的相关文章

如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

如果将synthesize省略,并且我们自己实现setter和getter方法时,系统就不会生成对应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和getter时方法内部实现 - (void)setName:(NSString *)name{ _name = name; } - (NSString *)name{ return _name; } 2,当把语义特性声明为retain时,setter和getter方法内部实现 - (void)set

setter 和 getter 高级 以及内存管理初级

setter 和 getter 的演变,紧接setter 和 getter 初级 [email protected] 和  @synthesize 这两个关键字的出现,就是为了剔除代码中的setter方法和getter方法 @property:可以自动生成某个成员变量的setter和getter声明 @property int age;//相当于下面这两句:- (void)setAge:(int)age;- (int)age; @synthesize自动生成age的setter和getter实现

Objective-C中的setter和getter使用

getter 和 setter 是对实例变量的一个设置和调用的作用 平时我们的实例变量都是@public的形式,这个形势的实例变量谁都可以去修改,跟我们现实中的某种职业一样. 这个时候就体现出封装的作用了,我定义的实例变量只能我让你用,你才能用.我让你怎么去用,你才能怎么取用. 怎么才能实现我的霸权注意呢? 这个时候@protected的作用的出来了.我给我的数据建立了一个笼子.如果你要用需要用我给你的钥匙才能进去用我的东西.这个就是getter ,如果我想让你怎么用,你才能怎么用的时候 这个就

关于setter 和 getter方法的一些总结(初级)

1.最基础的set 和 get 准备工作 Person.h @interface Person : NSObject { NSString *_hobby; // ObjC建议成员变量带"_" @protected // 受保护的 本类以及子类可以访问 NSString *_name; NSString *_gender; @private // 私有的 只有本类可以访问 NSInteger _age; NSInteger _weight; } #pragma mark --- 声明s

Objective-C的setter和getter

一.setter和getter的一般写法 setter和getter器可以说是一个类最基本的东西,任何一门面向对象的语言,都又这个概念,C++.java等等.因为setter和getter是对面向对象语言封装的最基本的支持. 在Objective-C的setter和getter器,当然也和一般的语言没有什么不同.只不过,添加了一些自己的特性. 比如有一个实例变量: 先在.h文件中声明setter和getter器 @property (nonatomic,retain) int age; -(vo

【Java基础】setter与getter方法

1 //下面代码实现设置和获取学生姓名和成绩. 2 class lesson5homework 3 { 4 public static void main(String[] args) 5 { 6 TestCode TC=new TestCode(); 7 TC.StudentTest();//调用测试类 8 } 9 } 10 class Student 11 //设置,获取student值及分别表明name和score值是否正确的Boolean类型的rn和rs 12 { 13 private

OC基础(四)setter和getter方法

setter和getter方法整体声明和实现虽然后面可以用@property代替,但是在后面的iOS开发中,setter方法或getter方法单独使用的频率比较高,应用比较广泛! @Interface Person:NSObject { NSString *_name; int _age; Sex _sex;      //此处枚举类型,属于基本数据类型,不用加“*” float _height; } @end 一.setter方法就是给属性赋值的方法 书写格式: 1.在类的声明中:- (voi

【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier '_name';did you mean 'name'

写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断.然后有时候根据需求,要同时重写属性的setter和getter方法.系统就会报错误::Use of undeclared identifier '_name';did you mean 'name' MARK:如果不想了解太多,直接的解决方法: 在@implementation 实现中添加一行代码就OK了 @sy

ES5 的 setter 和 getter

有两种方式使用 setter 和 getter 1. set/get var person = { _name: '', get name() { return this._name }, set name(n) { this._name = n } } // 测试 person.name // '' person.name = 'john' // 'john', 此时 person._name 也变成了 'john' 2. Object.defineProperty var person =