您如何使用键值验证?

Ker*_*rog 10 objective-c ios

有人可以告诉我如何在IOS中使用键值验证吗?我很迷惑.

我正在编写Payments SDK,人们将信用卡号,安全码等传递给Card类,我需要验证这些值.例如,确保信用卡号有效.

是否可以进行自动验证?

另外,我们可以立即调用所有验证器吗?

就像我有一个Card类一样,我可以调用if([card isValid])来一次调用所有的验证函数而不是自己调用吗?喜欢:

Card * card = [[Card alloc] init];
card.number = @"424242...";
card.securityCode = @"455";
card.expirationMonth = @"";
card.expirationYear = @"";
if([card isValid]) {
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Hol*_*lly 6

Susan提供的链接包含您应该需要的所有细节.示例实现如下:

- (BOOL)validateSecurityCode:(id *)ioValue 
                       error:(NSError * __autoreleasing *)outError 
{
    // The securityCode must be a numeric value exactly 3 digits long
    NSString *testValue = (NSString *)*ioValue;
    if (([testValue length]!=3) || ![testValue isInteger])) {
        if (outError != NULL) {
            NSString *errorString = NSLocalizedString(
                    @"A Security Code must be exactly 3 characters long.",
                    @"validation: Security Code, invalid value");
            NSDictionary *userInfoDict = @{ NSLocalizedDescriptionKey : errorString };
            *outError = [[NSError alloc] initWithDomain:SECURITYCODE_ERROR_DOMAIN
                                                   code:SECURITYCODE_INVALID_NAME_CODE
                                               userInfo:userInfoDict];
        }
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

注意:我NSString -isInteger这篇文章中使用过.

手册说

您可以直接调用验证方法,也可以通过调用validateValue:forKey:error:并指定密钥.

这样做的好处是您的- (BOOL)isValid方法可以非常简单.

- (BOOL)isValid
{
    static NSArray *keys = nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        keys = @[@"securityCode", @"number", @"expirationMonth", @"expirationYear"];
    });

    NSError *error = nil;
    for (NSString *aProperty in keys) {
        BOOL valid = [self validateValue:[self valueForKey:aProperty]
                                  forKey:aProperty
                                   error:&error];
        if (!valid) {
            NSLog("Validation Error: %@", error);
            return NO;
        }
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)