Swift 3 NSCache Общий параметр "KeyType" не может быть выведен

Этот код работал в Swift 2.x:

/// An internal in-memory cache
private var dataCache = NSCache.init()

В Swift 3 он вызывает ошибку компиляции:

Generic parameter 'KeyType' could not be inferred

Почему так и как я должен реорганизовать это (средство миграции не выбрало это)?

Ответы

Ответ 1

  • В первом Swift 3 betas NSCache был изменен на Cache.
  • В последних бета-версиях (в настоящее время 5) он был возвращен к NSCache.

В любом случае NSCache теперь является общим.

public class NSCache<KeyType : AnyObject, ObjectType : AnyObject> : NSObject { ...

поэтому наиболее общий синтаксис

private var dataCache = NSCache<AnyObject, AnyObject>()

Явный init() не нужен (даже в Swift 2)