PINCache objectForKey 返回 NSCoding 并且无法转换它
PINCache objectForKey returning NSCoding and can't casting it
我正在使用 PINCache (https://github.com/pinterest/PINCache) 将一些对象缓存到我的应用程序中。所以,使用 objC 是完美的,但是当我想用 swift 投射时,我有 EXC_BAD_ACCESS
当我打电话给objectForKey
- (id <NSCoding>)objectForKey:(NSString *)key;
而且我没有为那个键缓存任何东西,但是 Swift 我知道这个对象是一个 NSConding。所以,如果我将值放入键中,我没有问题。
那么,我如何转换这个 NSCoding 结果并与 nil 值进行比较。我只需要知道来自 PINCache 的对象 return 是否为 nil(从不缓存)。
我已经试过了:
private func setupTrucks() {
let trucksCached: AnyObject? = PINDiskCache.sharedCache().objectForKey(TruckCache.key)
if let _truck = trucksCached as? [Truck] { //EXC_BAD_ACCESS here
print(_truck)
}
}
private func setupTrucks() {
let trucksCached = PINDiskCache.sharedCache().objectForKey(TruckCache.key) as [Truck] //EXC_BAD_ACCESS here
if trucksCached.count > 0 {
print(_truck)
}
}
看起来 PINCache 没有将同步 objectForKey:
方法的 return 类型定义为 __nullable
。没有那个 Swift 不知道 return 类型是可选的。
我提交了一个 PR,已经被接受,应该可以解决这个问题。您现在应该可以执行以下操作:
let trucksCached: AnyObject? = PINDiskCache.sharedCache().objectForKey("truck_key")
if let _truck = trucksCached as? Truck {
print(_truck)
}
我正在使用 PINCache (https://github.com/pinterest/PINCache) 将一些对象缓存到我的应用程序中。所以,使用 objC 是完美的,但是当我想用 swift 投射时,我有 EXC_BAD_ACCESS
当我打电话给objectForKey
- (id <NSCoding>)objectForKey:(NSString *)key;
而且我没有为那个键缓存任何东西,但是 Swift 我知道这个对象是一个 NSConding。所以,如果我将值放入键中,我没有问题。
那么,我如何转换这个 NSCoding 结果并与 nil 值进行比较。我只需要知道来自 PINCache 的对象 return 是否为 nil(从不缓存)。
我已经试过了:
private func setupTrucks() {
let trucksCached: AnyObject? = PINDiskCache.sharedCache().objectForKey(TruckCache.key)
if let _truck = trucksCached as? [Truck] { //EXC_BAD_ACCESS here
print(_truck)
}
}
private func setupTrucks() {
let trucksCached = PINDiskCache.sharedCache().objectForKey(TruckCache.key) as [Truck] //EXC_BAD_ACCESS here
if trucksCached.count > 0 {
print(_truck)
}
}
看起来 PINCache 没有将同步 objectForKey:
方法的 return 类型定义为 __nullable
。没有那个 Swift 不知道 return 类型是可选的。
我提交了一个 PR,已经被接受,应该可以解决这个问题。您现在应该可以执行以下操作:
let trucksCached: AnyObject? = PINDiskCache.sharedCache().objectForKey("truck_key")
if let _truck = trucksCached as? Truck {
print(_truck)
}