Не удается получить доступ к PropertyWrappers при использовании didSet или передаче метода - PullRequest
0 голосов
/ 05 июля 2019

Я не знаю, является ли это ошибкой или ожидаемым поведением @PropertyWrappers, но мне это кажется странным.

Допустим, у меня есть простой класс TestViewModel

import Foundation
import Combine

final class TestViewModel {
    @Published var someText: String = ""
}

Когда я создаю вычисляемое свойство с didSet в TestTableViewCell, я не смогу получить доступ к Published, чтобы назначить его, например, для некоторого KeyPath.

Следующий код выдаст ошибку времени компиляции:

final class TestTableViewCell: UITableViewCell {    
    var testViewModel: TestViewModel! {
        didSet {
            setUpViewModel()
        }
    }

     private func setUpViewModel() {
          testViewModel.$someText // Error: Value of type 'TestViewModel' has no member '$someText'; did you mean 'someText'?
    }
}

То же самое происходит при передаче экземпляра vm в качестве параметра метода:

 final class TestTableViewCell: UITableViewCell {
      func setUpViewModel(testViewModel: TestViewModel) {
           testViewModel.$someText // Error: Value of type 'TestViewModel' has no member '$someText'; did you mean 'someText'?
    }
}

Когда я сохраню его как let или computedProperty, я смогу получить доступ к опубликованному экземпляру:

final class TestTableViewCell: UITableViewCell {    
     let testViewModel = TestViewModel() // or var testViewModel { return TestViewModel() }

     private func setUpViewModel() {
          testViewModel.$someText // No error
    }
}

Есть ли какой-либо способ использовать didSet или метод со ссылкой на мою viewModel и при этом иметь возможность получать доступ как к обернутому значению, так и к экземпляру PropertyWrapper?

...