Objective-C:自定义 BOOL 访问器(getter 和 setter)方法

标签 objective-c custom-attributes boolean accessor

我知道有人已经问过 Writing getter and setter for BOOL variable .但是,如果我分别定义自定义 getter 和 setter 方法 setImmediateisImmediate,我希望 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 作为实例变量的 View Controller 中,我想执行 passcode.immediate = NO,但我收到错误“Property在“PasscodeLock *”类型的对象上找不到“立即”。”

如何让 passcode.immediate = NO 工作?

最佳答案

你需要类似的东西

@property (nonatomic, getter=isImmediate) BOOL immediate;

在您的 .h 文件中,当然还有 @synthesize 语句在您的 .m 文件中。这将创建属性并定义您的 getter 方法名称。

关于Objective-C:自定义 BOOL 访问器(getter 和 setter)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5871984/

相关文章:

iphone - 阻止触摸传播到另一个 View

c# - 如何正确使用 automapper 将 bool 映射到枚举?

c++ - 链接 boolean 值给出与预期相反的结果

objective-c - 如何检测是否正在使用/从 Swift 编译 Objective-C header

iOS View 在 addSubview 上重置

c# - 如何使用用户定义的标签(自定义属性)区分类属性

Yii:添加自定义字段

c# - 检测是否手动调用了 AuthorizationAttribute

c++ - 为什么带引号的字符串在 std::string 之前匹配 bool 方法签名?

ios - iPhone : Animate circle with UIKit