我正在尝试在基于 Swift 的项目中使用 RestKit。 我似乎无法使用 Swift 原始数据类型,如 Int、Double、Bool 等,除了 String、Array 和 Dictionaries(这可能是因为它们免费桥接到 NSString, NSArray 和 NSDictionary)
使用 objective-c,我可以将我的对象中的属性定义为原始数据类型作为属性,这些属性是已分配的。在 Swift 中,我只能使用对象(String、NSNumber、Array、Dictionary),否则应用程序会因“setValue:forUndefinedKey: 此类与键 aBool 的键值编码不兼容”而崩溃。
例子: 这是我的对象在 Objective-C 中的样子:
@interface TestObject : NSObject
@property (strong, nonatomic) NSString *aString;
@property (assign, nonatomic) BOOL aBool;
@property (assign, nonatomic) CGFloat aFloat;
@end
和 Swift 中的“等价物”:
class TestObject:NSObject {
var aString:NSString?
var aBool:Bool?
var aFloat:Double?
}
那会崩溃,虽然我确实理解为什么会崩溃,但我想知道是否有另一种解决方法,而不是像在 Objective-C 中一样对 bool 值、整数和 float 使用 NSNumber?
(如果有任何 RestKit 开发人员正在阅读这篇文章:首先感谢您的工作,然后:是否有任何关于 Swift 支持/移植到 Swift 的计划?)
最佳答案
我正在用 Swift 开发一个应用程序,我们在 2014 年夏天开始工作,当时 Swift 还很新。我开始使用 RestKit 来处理与服务器的 REST 通信,并且我至少花了整整一个月的时间来配置 RestKit 以供我使用。
虽然我不知道您的用例,但我发现使用 Alamofire 和 SwiftyJSON 更容易。它为我节省了大量时间。这也意味着我正在手动执行从动态类型到我的实体对象中的类型的转换,但这样做所花费的时间远远少于我之前尝试配置 RestKit 所花费的时间。
如果这对您来说不可行,您可能想看看 RestKit 中可用的 RKValueTransformer 类;在您的 RKObjectMapping 中,您可以为各个属性指定自己的转换器。但同样,我认为最好将时间花在 Alamofire 和 SwiftyJSON 上。毕竟,它们是原生的 Swift 库。
关于swift - 在 Swift 中使用 Restkit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716174/