CacheProtocol описывает кеш с конкретным типом Value: запись optional-значения, синхронное чтение и чтение через callback.
import UIKit
CacheProtocol описывает кеш с конкретным типом Value: запись optional-значения, синхронное чтение и чтение через callback.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
import UIKit
protocol CacheProtocol { associatedtype Value func setValue(_ value: Value?, forKey key: String) func value(forKey key: String) -> Value? func fetchValue(forKey key: String, completion: @escaping (Value?) -> Void) }
Ответ
CacheProtocol описывает кеш с конкретным типом Value: запись optional-значения, синхронное чтение и чтение через callback.
associatedtype Value связывает тип данных со всей реализацией кеша. Возможная реализация для одного потока:
final class Cache<T>: CacheProtocol {
private var storage: [String: T] = [:]
func setValue(_ value: T?, forKey key: String) {
storage[key] = value
}
func value(forKey key: String) -> T? { storage[key] }
func fetchValue(forKey key: String,
completion: @escaping (T?) -> Void) {
completion(value(forKey: key))
}
}
Здесь nil означает удаление, хотя сам протокол эту семантику явно не документирует. Callback не обязательно асинхронный: нужны отдельные договорённости об очереди и количестве вызовов. UIKit для этих объявлений не требуется.