PINCache 对象 ForKey 返回 NSCoding 并且无法强制转换它



我使用PINCache (https://github.com/pinterest/PINCache)来缓存一些对象到我的应用程序中。所以,使用objC是完美的,但是当我想用swift转换时,我有EXC_BAD_ACCESS

当我调用objectForKey

- (id <NSCoding>)objectForKey:(NSString *)key;

我没有缓存那个键,但是Swift理解这个对象是一个NSConding。所以,如果我在一个键中有值,我没有问题。

我如何转换这个NSCoding结果并与nil值进行比较。我只需要知道从PINCache返回的对象是否为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:方法的返回类型定义为__nullable。否则Swift不会知道返回类型是可选的。

我提交了一份PR,已经被接受了,应该可以解决这个问题。现在,您应该能够执行如下操作:

let trucksCached: AnyObject? = PINDiskCache.sharedCache().objectForKey("truck_key")
if let _truck = trucksCached as? Truck {
    print(_truck)
}

最新更新