Fabian Canas

8 个 Pod
Objective-C 中的一个简单模板渲染器。用对象的属性、方法和键路径填充模板。
给定 ``` @interface MYObject : NSObject @property (nonatomic, copy) NSString *color; @property (nonatomic, copy) NSNumber *favoriteNumber; @property (nonatomic, assign) NSInteger leastFavoriteNumber; @end
...
obj = [[MYObject alloc] init]; obj.color = @"red"; obj.favoriteNumber = @47; obj.leastFavoriteNumber = -12; ```
和
NSString *templateString = @"My favorite color is {{ color }} and my favorite number is {{ favoriteNumber }} and my least favorite number is {{ leastFavoriteNumber }}!";
``` template = [[FFCTemplate alloc] initWithTemplate:templateString]; template.valueSource = obj;
NSString *result = [template render]; //@"My favorite color is red and my favorite number is 47 and my least favorite number is -12!" ```
许可:MIT
FFCTextField 是一个实现优雅文本字段的小集合,适用于在表单和其他地方使用。
文本框的占位符文本以动画形式进入浮动的标题标签。
文本框还提供了一些验证功能,通过相同的浮动标签机制向用户反馈。
许可:MIT
Formulary 是一个用于创建动态、声明式表格视图表单的 iOS 库。
Formulary 受 Swift 中的 XLForm 启发,旨在为开发者提供灵活性。它的目的是保持小巧,可能是其他库的基础。
面向开发的特性包括
其他酷炫特性
```swift self.form = Formulary.ConcreteForm(sections: [ Formulary.ConcreteFormSection(rows: [ Formulary.ConcreteFormRow(name:"Name", tag: "name", type: .Text, validation: RequiredString("Name")), Formulary.ConcreteFormRow(name:"Email", tag: "email", type: .Text), Formulary.ConcreteFormRow(name:"Age", tag: "age", type: .Number, validation: MinimumNumber("Age", 13))], name:"Profile"), Formulary.ConcreteFormSection(rows: [ Formulary.ConcreteFormRow(name:"Favorite Number", tag: "favoriteNumber", value: nil, type: .Decimal, validation: MinimumNumber("Your favorite number", 47) && MaximumNumber("Your favorite number", 47)), Formulary.ConcreteFormRow(name:"Ice Cream?", tag: "wantsIceCream", value: false, type: .Switch), Formulary.ConcreteFormRow(name:"Beer?", tag: "wantsBeer", value: true, type: .Switch), Formulary.ConcreteFormRow(name:"Other Thoughts?", tag: "thoughts", type: .Text),], name:"Preferences", footerName: "Fin"), Formulary.ConcreteFormSection(rows: [ Formulary.ConcreteFormRow(name:"Show Values", tag: "show", type: .Button, action: { _ in
let data = NSJSONSerialization.dataWithJSONObject(values(self.form) as NSDictionary, options: nil, error: nil)!
let s = NSString(data: data, encoding: NSUTF8StringEncoding)
let alert = UIAlertController(title: "Form Values", message: s, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
})
]) ] ) ```
许可:MIT
将映射服务响应映射到对象。
OHMKit 是一个混合,可以使任何 Objective-C 类更容易从字典表示形式(例如从 RESTful 网络服务中获取的表示形式)中填充数据。
它存在的原因是 RestKit 包含了太多关注点,而 Mantle 同样承担了太多任务。
没有网络层。没有实体关系管理。有其他工具可以做到这一点。
许可:MIT
Objective-C 是 C,而 C 可能是危险的。不要盲目地进行对象映射。坚持高级语言特性,并编写更易于阅读的代码。
简单来说,你可以做这样的事情
NSMutableArray *mArray = [NSMutableArray safe_cast:array]; // 如果 `array` 不是可变数组,则 `mArray` 为 `nil`,如果是可变数组,则 `mArray` 等于 `array`。
或者在不需要显式检查的情况下执行目标所响应的选择器
[array safe_makeObjectsSafelyPerformSelector:@selector(method)];
或者对特定种类的对象进行遍历
[array safe_enumerateObjectsOfKind:[MyObject class] usingBlock:^(MyObject *obj, NSUInteger idx, BOOL *stop) { [obj setNumber:@3]; }];
以及其他许多类似的集合方法。
许可:MIT