PINCache objectForKey返回NSCoding并且无法强制转换它

时间:2015-07-17 03:50:16

标签: ios swift casting exc-bad-access nscoding

我正在使用PINCache(https://github.com/pinterest/PINCache)将一些对象缓存到我的应用中。所以,使用objC它是完美的,但是当我想用swift进行投射时我有EXC_BAD_ACCESS

当我致电objectForKey

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

我没有为该密钥缓存,但Swift明白该对象是一个NSConding。所以,如果我有一个键的值,我没有问题。

那么,我如何转换此NSCoding结果并与nil值进行比较。我只需要知道从PINCache返回的对象是否为零(从不缓存)。

我已经尝试过了:

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)
    }
}

1 个答案:

答案 0 :(得分:1)

看起来PINCache没有将同步objectForKey:方法的返回类型定义为__nullable。没有它,Swift不知道返回类型是可选的。

我提交的PR已经被接受,应该解决问题。您现在应该可以执行以下操作:

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