无法推断Swift 3 NSCache通用参数'KeyType'

Luk*_*asz 18 ios swift swift3

此代码适用于Swift 2.x:

/// An internal in-memory cache
private var dataCache = NSCache.init()
Run Code Online (Sandbox Code Playgroud)

在Swift 3中,它会导致编译错误:

Generic parameter 'KeyType' could not be inferred
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我应该如何重构这一点(迁移工具没有选择这个)?

vad*_*ian 40

  • 在第一个Swift 3中,beta NSCache已经改为Cache.
  • 在最新的测试版(目前为5)中,它已被恢复为NSCache.

无论如何NSCache现在是通用的.

public class NSCache<KeyType : AnyObject, ObjectType : AnyObject> : NSObject { ...
Run Code Online (Sandbox Code Playgroud)

所以最通用的语法是

private var dataCache = NSCache<AnyObject, AnyObject>()
Run Code Online (Sandbox Code Playgroud)

init()不需要显式(甚至在Swift 2中也没有)

  • 我很好奇为什么他们在beta5中再次将Cache恢复为NSCache (4认同)
  • @BenSullivan嗨Ben,这对我有用:让cache = NSCache <NSString,UIImage>(); func setImage(image:UIImage,forKey key:String){cache.setObject(image,forKey:key as NSString)} (4认同)
  • @Lukasz我相信这是因为swift核心成员计划在不久的将来使用NSCache的价值类型.NSPredicate和其他一些人也是如此. (2认同)