Objective-C:自定义BOOL访问器(getter和setter)方法
发布时间:2020-12-16 10:43:10 所属栏目:百科 来源:网络整理
导读:我知道有人已经问过 Writing getter and setter for BOOL variable.但是,如果我正在定义一个定制的吸气剂和放大器setter方法setImmediate isImmediate分别,我想使用passcode.immediate = NO来工作. 我没有任何实例变量,但也许我应该?我可以为NSDate * lastU
我知道有人已经问过
Writing getter and setter for BOOL variable.但是,如果我正在定义一个定制的吸气剂和放大器setter方法setImmediate& isImmediate分别,我想使用passcode.immediate = NO来工作.
我没有任何实例变量,但也许我应该?我可以为NSDate * lastUnlocked添加一个. 到目前为止,这是相关的代码: // PasscodeLock.h extern NSString *const kPasscodeLastUnlocked; @interface PasscodeLock : NSObject { } - (BOOL)isImmediate; - (void)setImmediate:(BOOL)on; - (NSDate *)lastUnlocked; - (void)resetLastUnlocked; - (void)setLastUnlocked:(NSDate *)lastUnlocked; @end // PasscodeLock.m #import "PasscodeLock.h" NSString *const kPasscodeLastUnlocked = @"kPasscodeLastUnlocked"; @implementation PasscodeLock #pragma mark PasscodeLock - (BOOL)isImmediate { return self.lastUnlocked == nil; } - (void)setImmediate:(BOOL)on { if (on) { [self resetLastUnlocked]; } else { self.lastUnlocked = nil; } } - (NSDate *)lastUnlocked { return [[NSUserDefaults standardUserDefaults] objectForKey:kPasscodeLastUnlocked]; } - (void)resetLastUnlocked { NSDate *now = [[NSDate alloc] init]; self.lastUnlocked = now; [now release]; } - (void)setLastUnlocked:(NSDate *)lastUnlocked { [[NSUserDefaults standardUserDefaults] setObject:lastUnlocked forKey:kPasscodeLastUnlocked]; } 然后,在一个将PasswordLock * passwordLock作为实例变量的视图控制器中,我想做passcode.immediate = NO,但是我在“PasscodeLock *”类型的对象上找不到“属性’立即’的错误.” 如何获得passcode.immediate = NO? 解决方法
我认为问题是你的getter和setter名称不一致.默认情况下,如果你有
foo.immediate 在你的代码中,it is assumed getter和setter分别命名为-immediate和-setImmediate:您的getter未正确命名.解决这个问题的最佳方法是声明Mark和Kenny已经说过的属性,但你也可以更改你的getter的名字. 关键是你不需要声明属性来使用点语法,但是如果要使用点语法,则声明属性是声明getter和setter的推荐方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |