SOCKit 1.1

SOCKit 1.1

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布上次发布2014 年 12 月

未知用户 维护。



SOCKit 1.1

  • Jeff Verkoeyen

用于 Objective-C 的字符串和对象编码。与 "socket" 同音。

使用 SOCKit 和 SOCPattern,您可以将对象转换为字符串,反之亦然。

两个例子,因为开发者喜欢例子。

SOCPattern* pattern = [SOCPattern patternWithString:@"api.github.com/users/:username/gists"];
[pattern stringFromObject:githubUser];
> @"api.github.com/users/jverkoey/gists"
SOCPattern* pattern = [SOCPattern patternWithString:@"github.com/:username"];
[pattern performSelector:@selector(initWithUsername:) onObject:[GithubUser class] sourceString:@"github.com/jverkoey"];
> <GithubUser> username = jverkoey

嘿,这实际上与在 Rails 中定义路由非常相似。

简直一模一样。

这不就像 Three20 的导航器吗?

除了太棒了之外。它也与 Three20 的路由完全不兼容。如果您已经在 Three20 的路由技术中投入了大量精力,这有点令人沮丧,但有以下几个理由说明为什么 SOCKit 更好

  1. 选择器不在模式中定义。Three20 需要您在模式中定义选择器的事实绝对令人毛骨悚然:在您的控制器中重命名一个方法,您的 URL 路由将静默中断。没有警告,直接中断。在使用 SOCKit 时,您使用 @selector 注释定义选择器,SOCKit 从模式定义中推断参数。这样,您就可以依赖编译器在未定义任何地方的选择器时发出警告。
  2. 使用真正的 KVC 进行编码。您现在可以完全访问 KVC 集合运算符
  3. SOCKit 完全能进行单元测试和文档记录。这里没有更多要说的。

以下是 Three20 和 SOCKit 之间的差异的简要说明,如果 SOCKit 被用作 Three20 的 URL 路由的后端。

Three20: [map from:@"twitter://tweet/(initWithTweetId:)" toViewController:[TweetController class]];
SOCKit:  [map from:@"twitter://tweet/:id" toViewController:[TweetController class] selector:@selector(initWithTweetId:)];

Three20: [map from:[Tweet class] name:@"thread" toURL:@"twitter://tweet/(id)/thread"];
SOCKit:  [map from:[Tweet class] name:@"thread" toURL:@"twitter://tweet/:id/thread"];

在哪里使用

SOCKit 是 Nimbus 的一个兄弟项目,Nimbus 是一个轻量级且模块化的框架,可以让您轻松在 iOS 应用中开辟新道路。Nimbus 将很快在重新构想 Three20 的导航器时使用 SOCKit。

RESTKit 用户会注意到 SOCKit 提供了类似 RESTKit 的 RKMakePathWithObject 的功能。事实上,RKMakePathWithObject 和其背后的 RKPathMatcher 类都依赖于 SOCKit。

将 SOCKit 添加到您的项目

这个轻量级库构建得非常简单,可以直接集成到您的项目中。在 SOCKit.h 和 SOCKit.m 文件中,包含了您需要的一切功能,以便开始将字符串和对象进行映射。要开始使用 SOCKit,只需下载或 git checkout SOCKit 仓库,将 SOCKit.h 和 SOCKit.m 拖动到项目的源文件树中。在您想使用 SOCKit 的地方 #import "SOCKit.h",然后开始进行一些疯狂的字符串与对象之间的编码。

一些酷功能

在将对象编码为字符串时,通过在属性名前加冒号来定义参数。例如,如果您有一个具有 tweetId 属性的 Tweet 对象,模式参数名称看起来就是 :tweetId。很简单。

但是现在假设您有一个包含对 TwitterUser 对象的引用的 Tweet 对象,并且该 TwitterUser 对象具有 username 属性。看看这个: :user.username。如果您对我的一条推文进行了编码,并使用 SOCKit 模式,结果是字符串 @"featherless"。KVC 真棒。

了解更多信息

详细的文档可以在 SOCKit.h 头文件中找到。

贡献

如果您在 SOCKit 中发现了一个错误,请在 Github SOCKit 问题跟踪器 中提交问题。更好的是:如果您对这个错误有解决方案,请在 Github 上分叉项目并提交合并请求。