Я хочу использовать слабые ссылки в общих структурах данных; в примере ниже массива, но в общем случае какой-либо общий тип. Я почти получить его работать :(Как вы можете использовать слабые ссылки в структуре данных Swift, типизированных как протокол?
Мои эксперименты начались хорошо, следующие работы:
// Array of weak references OK
struct WeakReference<T: AnyObject> {
weak var value: T?
}
class C {
var i: Int = 0
}
let c = C() // Strong reference to prevent collection
let weakCs = [WeakReference(value: c)] // OK
print("C: \(weakCs[0].value!.i)") // 0
Я могу добавить протокол:
// Array of weak references that implements a protocol OK
protocol P: AnyObject { // Note AnyObject
var i: Int { get }
}
class CP: P {
var i: Int = 0
}
let cP = CP() // Strong reference to prevent collection
let weakCPs = [WeakReference(value: cP)] // OK
print("CP: \(weakCPs[0].value!.i)") // 0
Но когда я хочу массив слабых ссылок на протокол Я получаю сообщение об ошибке:
// Array of weak references of a protocol not OK
let weakPs: [WeakReference<P>] = [WeakReference(value: cP)] // Using 'P' as
a concrete type conforming to protocol 'AnyObject' is not supported
print("P: \(weakPs[0].value!.i)") // 0
Есть ли что-то, что я вы пропустили?
Сообщение об ошибке «Использование« P »в качестве конкретного типа, соответствующее протоколу « AnyObject »не поддерживается», подразумевает, что это временное ограничение компилятора. Это будет исправлено? Должен ли я подавать сообщение об ошибке?
Заранее спасибо за любые советы,
- Говард.