#Vastra
Vastra 是一个库,它帮助对对象应用不同的策略验证。
如何获取 Vastra
将 Vastra 添加到您的项目中最简单的方法是使用 CocoaPods。将以下行添加到您的 Podfile 中
pod 'Vastra', '~> 1.0'
使用 Vastra
创建策略
创建您想要用于验证对象的策略实例
// Default validation strategy (always return validity)
VSValidationStrategy *defaultStrategy = [[VSValidationStrategy alloc] init];
// Timestamp based validation strategy
VSValidationStrategy *timestampStrategy = [[VSTimestampValidationStrategy alloc] init];
// Reachability validation strategy, uses your custom reachability provider
id <VSReachabilityProtocol> myReachability = [[MyReachability alloc] init];
VSValidationStrategy *reachabilityStrategy = [[VSReachabilityValidationStrategy alloc] initWithReachabilityProvider:myReachability];
也可以创建自定义策略。为此
- 继承
VSValidationStrategy
类 - 重写
isObjectValid:
方法并实现您自定义的逻辑。该方法必须返回
VSValidationStrategyResultValid
如果对象有效。VSValidationStrategyResultInvalid
如果对象无效。VSValidationStrategyResultUnknown
如果策略无法决定。
- 如果您的策略需要特定数据来实现验证策略,创建一个
VSValidationStrategyDataSource
的子协议并使您的对象实现它。查看VSTimestampValidationStrategy
的实现以获得更好的示例。
创建验证服务
创建一个包含上述创建的策略的 VSValidationService
实例。
NSArray *strategies = @[reachabilityStrategy,
timestampStrategy,
defaultStrategy];
VSValidationService *validationService = [[VSValidationService alloc] initWithStrategies:strategies];
数组中策略的顺序将定义验证阶段的顺序。对象将首先尝试验证第一个策略,然后是第二个,以此类推。
如果没有策略验证或拒绝对象,验证服务将考虑对象为无效。
在上面的例子中我们使用显示的顺序,因为我们希望我们的验证服务按以下方式工作:
- 如果没有互联网连接,我们希望对象被视为有效。否则,让我们转到第二个验证策略。
- 如果要验证的对象的
lastUpdate
日期小于now+expiryTimeInterval
,则我们将对象视为有效。否则无效。 - 如果在对象中没有
lastUpdate
日期,则我们将对象视为有效。
使用验证服务
假设我们有一个 MJUser
类
@interface MJUser : NSObject <VSTimestampValidationStrategyDataSource>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSDate *updatedAt;
@end
@implementation MJUser
- (NSDate*)lastUpdate {
return _updatedAt;
}
- (NSTimeInterval)expiryTimeInterval {
return 5; // 5 seconds
}
@end
要验证用户实例,我们可以这样做
// Create user instance
MJUser *user = [[MJUser alloc] init];
user.name = @"John Doe";
user.updatedAt = [NSDate date];
// Executing the validation service
if ([validationService isObjectValid:user])
NSLog(@"User did pass validation");
else
NSLog(@"User failed validation");
假设我们有一个有效的互联网连接,此用户将通过验证测试。然而,如果我们在此代码后 5 秒内运行此代码,此用户将因为时间戳策略而验证失败。
项目维护者
此开源项目由 Joan Martin 维护。
许可
Copyright 2016 Mobile Jazz
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://apache.ac.cn/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.