我正在尝试在基于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
和"等价物"在斯威夫特:
class TestObject:NSObject {
var aString:NSString?
var aBool:Bool?
var aFloat:Double?
}
崩溃,虽然我确实理解为什么它会崩溃,但我想知道,是否有另一种解决方法,而不是使用NSNumber for Booleans,Integers和Floats,就像它在Objective-C中的工作原理一样?
(如果任何RestKit开发人员正在阅读此内容:首先感谢您的工作,然后:是否有关于Swift支持/移植到Swift的计划?)
答案 0 :(得分:8)
我在Swift做一个应用程序,我们在2014年夏天开始工作,当时Swift很新。我开始使用RestKit来处理与服务器的REST通信,我花了至少整整一个月的时间来配置RestKit供我使用。
虽然我不知道您的用例,但我发现使用Alamofire和SwiftyJSON更容易。它节省了我很多时间。这也意味着我手动执行从动态类型到实体对象中的类型的转换,但是这样做的时间远远少于我之前尝试配置RestKit的时间。
如果这对您来说不可行,您可能需要查看RestKit中可用的RKValueTransformer类;在您的RKObjectMapping中,您可以为各个属性指定自己的变换器。但同样,我认为花在Alamofire和SwiftyJSON上的时间会更好。毕竟,它们是原生的Swift库。
答案 1 :(得分:0)
对于那些无法在Swift项目中删除RestKit的人来说,这个解决方案可能会有所帮助。
在我的情况下,应用程序崩溃了,因为RestKit无法将JSON中的git checkout -b new_feature <SHA-1 for commit>
/ "true"
字符串映射到Swift中的"false"
类型。
我解决了它在我的类中添加另一个Bool
属性并在其String
方法上更新了有用的布尔值。在您的情况下,这将是:
didSet
希望这有帮助!