Иногда мне приходится поддерживать экземпляр класса без явной именованной ссылки на него.Например, в этом коде компилятор жалуется.
let a = AAA()
// "... `b` never used" warning.
let b = a.bbb()
a.ddd(333)
Но если я заменим b
на _
, то экземпляр мгновенно умирает и выдает неверный результат.
let a = AAA()
// "... `b` never used" warning.
let _ = a.bbb()
a.ddd(333)
Тот же результат без ключевого слова let
.
let a = AAA()
// "... `b` never used" warning.
_ = a.bbb()
a.ddd(333)
Вот пример рабочего кода для воспроизведения ситуации.
func eee() {
final class AAA {
weak var ccc: AAA?
func bbb() -> AAA {
let r = AAA()
ccc = r
return r
}
func ddd(_ value: Int) {
// This side effect is what I want.
print(value)
ccc?.ddd(value)
}
}
let a = AAA()
// "... `b` never used" warning.
let b = a.bbb()
a.ddd(333)
_ = b
}
eee()
Как подавить предупреждение, сохранив экземпляр живым?
Я использую Swift 4.1, включенный в Xcode 10.0.
Edit
Этот код является лишь кратким примером, чтобы показать ситуацию.Содержание этого класса не очень важно.Я просто хочу показать случай, когда объект необходим для жизни без явной ссылки на него.
Если вы не понимаете мое намерение, извините.В коде нет намерений, кроме как показать проблему.Я переименовал все, чтобы стереть смыслы.