允许您从字典创建对象,并处理大量其他烦人的任务。灵感来自于我在 Sqwiggle 期间编写的代码。NSObject-OnSteroids 来自于 Sqwiggle iOS SDK 中的 SQObject.{h,m}
将 pod 'NSObject-OnSteroids'
添加到您的 podfile 中,然后导入 <NSObject-OnSteroids/NSObject-OnSteroids.h>
。示例代码可在子目录 "NSObject-OnSteroidsExample" 中找到。
创建一个您想映射的新类。在这个例子中,我将创建一个名为 "Book" 的对象,并在 .h 和 .m 文件中使用以下代码
Objective-C
//Book.h
#import <NSObject-OnSteroids/NSObject-OnSteroids.h>
@interface Book : NSObject
@property (nonatomic, retain) NSString *title;
@property (nonatomic, copy) NSDictionary *someDictionary;
@end
//Book.m
#import "Book.h"
@implementation Book
-(NSDictionary *)modelDefinition
{
return @{@"title" : @"title", @"someDictionary": @"dictKey.importantDictionary"};
}
@end
Swift(注意:对象必须从 NSObject 继承。抱歉 :-/ 我稍后会更新这个。)
//Objective-C Bridging Header
...
#import <NSObject-OnSteroids/NSObject-OnSteroids.h>
//Book.swift
class Book : NSObject {
...
override func modelDefinition() -> [NSObject : AnyObject]! {
return ["title" : "title", "someDictionary" : "dictKey.importDictionary"]
}
}
您可能想知道:"这是那个模型定义的垃圾是什么?" 这是一个您需要在对象中重写的方法,以便它知道哪些密钥映射到哪些属性。modelDefinition 的格式为
{"iOS Class Property" : "Dictionary KeyPath"}
请注意 @"dictKey.importantDictionary"
。如果您对 KeyValuePath 的概念不是很清楚,基本来说,添加 "." 允许您遍历字典以获取任何子项。在这种情况下,@"dictKey.importantDictionary"
暗示通过这里传递的对象将有如下结构:{dictKey": {"importantDictionary" : {"blah" : "blah"}}}
现在我们已经处理好了这个对象,接下来我们在其他地方导入 Book.h
并初始化一个 Book 对象
Objective-C
//SomeOtherClass.m
#import "Book.h"
...
Book *book = [Book objectWithDictionary:@{@"title": @"How Now Brown Cow", @"dictKey" : @{@"importantDictionary" : @{@"blah" : @"hah"}}];
NSLog(@"Book Object: %@ ", book);
NSLog(@"Book Title: %@", book.title);
NSLog(@"Book Dictionary %@", book.someDictionary);
Swift
//SomeOtherClass.swift
import Book
...
var Book : Book = Book(dictionary: ["title": "How Now Brown Cow", "dictKey" : ["importantDictionary" : ["blah" : "blah"]]])
println("Book Object: \(book)")
println("Book Title: \(book.title)")
println("Book Dictionary: \(book.someDictionary)")
如您所见,已经将提供的目标对象适当地映射到各自的目 标。太棒了。
假设我想获取我刚才创建的对象的字典格式。只需这样做
Objective-C
[book dictionaryFormat];
Swift
book.dictionaryFormat()
您将得到包含所有属性及其相应值的字典
{
dictKey = {"importantDictionary" : {"blah" : "hah"}};
title = "How Now Brown Cow";
}
天哪!有效地减少了您编写任何代码来创建用于发布的好格式字典的需求,因为它已经知道您 API 使用哪些字段了!
打开 GH Issue。我很乐意讨论问题。这还非常早期,还有许多其他的方法可以走。