Swift 中的 NSSecureCoding(Facebook SDK)
NSSecureCoding in Swift (Facebook SDK)
我正在尝试将一段 Objective-C 代码翻译成 Swift 代码。
Objective-C:
#import "SUCacheItem.h"
#define SUCACHEITEM_TOKEN_KEY @"token"
#define SUCACHEITEM_PROFILE_KEY @"profile"
@implementation SUCacheItem
+ (BOOL)supportsSecureCoding
{
return YES;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
SUCacheItem *item = [[SUCacheItem alloc] init];
item.profile = [aDecoder decodeObjectOfClass:[FBSDKProfile class] forKey:SUCACHEITEM_PROFILE_KEY];
item.token = [aDecoder decodeObjectOfClass:[FBSDKAccessToken class] forKey:SUCACHEITEM_TOKEN_KEY];
return item;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.profile forKey:SUCACHEITEM_PROFILE_KEY];
[aCoder encodeObject:self.token forKey:SUCACHEITEM_TOKEN_KEY];
}
@end
我把这段代码翻译成这样:
class CacheItem: NSObject, NSSecureCoding {
let CACHEITEM_TOKEN_KEY = "token"
let CACHEITEM_PROFILE_KEY = "profile"
var profile: AnyObject
var token: AnyObject
func supportsSecureCoding() -> Bool {
return true
}
required init(coder aDecoder: NSCoder) {
var item = CacheItem(coder: aDecoder)
item.profile = aDecoder.decodeObjectOfClass(FBSDKProfile.self, forKey: CACHEITEM_PROFILE_KEY)!
item.token = aDecoder.decodeObjectOfClass(FBSDKAccessToken.self, forKey: CACHEITEM_TOKEN_KEY)!
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.profile, forKey: CACHEITEM_PROFILE_KEY)
aCoder.encodeObject(self.token, forKey: CACHEITEM_TOKEN_KEY)
}
}
这给我一个错误:类型 'CacheItem' 不符合协议 'NSSecureCoding'
我在这里错过了什么?
提前致谢!
supportsSecureCoding 函数需要在 class 级别:
class func supportsSecureCoding() -> Bool {
return true
}
我正在尝试将一段 Objective-C 代码翻译成 Swift 代码。
Objective-C:
#import "SUCacheItem.h"
#define SUCACHEITEM_TOKEN_KEY @"token"
#define SUCACHEITEM_PROFILE_KEY @"profile"
@implementation SUCacheItem
+ (BOOL)supportsSecureCoding
{
return YES;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
SUCacheItem *item = [[SUCacheItem alloc] init];
item.profile = [aDecoder decodeObjectOfClass:[FBSDKProfile class] forKey:SUCACHEITEM_PROFILE_KEY];
item.token = [aDecoder decodeObjectOfClass:[FBSDKAccessToken class] forKey:SUCACHEITEM_TOKEN_KEY];
return item;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.profile forKey:SUCACHEITEM_PROFILE_KEY];
[aCoder encodeObject:self.token forKey:SUCACHEITEM_TOKEN_KEY];
}
@end
我把这段代码翻译成这样:
class CacheItem: NSObject, NSSecureCoding {
let CACHEITEM_TOKEN_KEY = "token"
let CACHEITEM_PROFILE_KEY = "profile"
var profile: AnyObject
var token: AnyObject
func supportsSecureCoding() -> Bool {
return true
}
required init(coder aDecoder: NSCoder) {
var item = CacheItem(coder: aDecoder)
item.profile = aDecoder.decodeObjectOfClass(FBSDKProfile.self, forKey: CACHEITEM_PROFILE_KEY)!
item.token = aDecoder.decodeObjectOfClass(FBSDKAccessToken.self, forKey: CACHEITEM_TOKEN_KEY)!
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.profile, forKey: CACHEITEM_PROFILE_KEY)
aCoder.encodeObject(self.token, forKey: CACHEITEM_TOKEN_KEY)
}
}
这给我一个错误:类型 'CacheItem' 不符合协议 'NSSecureCoding'
我在这里错过了什么?
提前致谢!
supportsSecureCoding 函数需要在 class 级别:
class func supportsSecureCoding() -> Bool {
return true
}