Existe maneira de verificar se uma referência `sem dono '(na verdade` sem dono (seguro) `) foi desinitada?

Existe alguma maneira de verificar umaunowned(safe) Referência rápida para "disponibilidade"? Então, estou procurando uma função hipotética comoisReferenceAccessible neste exemplo:

func someMethod() {
  someAsyncOperation(parameters) { [unowned(safe) self] in 
    guard isReferenceAccessible(self) else {
      return
    }

    self.someAnotherMethod()
  }
}

Aviso Legal:Esta questão não é sobreweak referências! Estou ciente de comostrong, unowned eweak trabalho de referências. E eu não quero usarweak referências (porque pode ser lento e mutável). Eu sei dissounowned(safe) referências ainda serão alocadas, mesmo que já estejamdeinited quando estamos tentando acessá-lo. E eu sei que um compilador pode fazer essa verificação e, na verdade, antes de um aplicativo falhar.

Portanto, acredito que possa ser uma técnica / paradigma muito poderosa e bem executada para quebrar os ciclos de referência no Swift moderno.

Além disso, acredito que pode ser um recurso incrível de linguagem! Por exemplo, vamos assumir que temos o modificador chamadoshared_ownership e funciona o pensamento acima descrito comportamento como este:

method(parameters) { [shared_ownership self] in
  self.someAnotherMethod()
}

... com uma implementação como esta:

method(parameters) { [unowned(safe) self] in
  guard isReferenceAccessible(self) else {
    return
  }

  self.someAnotherMethod()
}

... com efeitos colaterais (semweakcomplexidade relacionada e penalidade de desempenho) equivalente a:

method(parameters) { [weak self] in
  guard let strongSelf = self else {
    return
  }

  strongSelf.someAnotherMethod()
}

Oh, seria fantástico!

Mais informações sobreas diferenças entreweak, unowned(safe)eunowned(unsafe).

Atualizar

Encontrei uma proposta impressionante do Swift que relacionava o recurso discutido acima:Permitir o uso de ligação opcional para atualizar a si próprio de uma referência fraca para forte.

questionAnswers(1)

yourAnswerToTheQuestion