#swift #combine
#swift #объединить
Вопрос:
Я начинаю с combine с swift, но испытываю трудности (раньше имел опыт работы в swiftui). Итак, вопрос в том, как выполнить определенную операцию:
- допустим, у меня есть vc1. и я перехожу к vc2 оттуда 2. затем я запускаю закрытие сети asynchronos и возвращаюсь к vc1 (путем вывода vc2).
- Теперь предположим, что я хочу передать просто строку из asycnrhoss clousre vc2 в vc1, когда я вернусь к vc1. как я могу этого добиться?
Я хочу использовать publisher, скажем, <String, Never> как я могу подписаться на свой vc1 и опубликовать или отправить его из vc2?
Я использую этот подход, но он не работает, он никогда не доходит до кода под приемником…..
public class Parent {
public static let shared = Parent()
public var publisher = PassthroughSibject<String,Never>()
}
class vc1: ViewController {
func viewdidLoad() {
let subscription = Parent.shared.oublisehr.sink { (result) in
print(result)
}
}
func navigatetoVC1() {
///// some code to navigate to vc1
}
func button() {
self.navigatetoVC1
}
}
class vc2: ViewController {
func viewDidload() {
///
}
func performsomeOperation() {
someasyncoperation(completion: { result in
switch result {
case .success:
//send some data to vc1
Parent.shared.publisher.send("testdata")
case .failure:
//send some data to vc1
})
self.dismisVC2() //some method to pop out vc2
}
}
Ответ №1:
Ваш код почти правильный, за исключением того, что вы используете свой Anycancellable внутри viewdidload, поэтому его область действия исчерпывается. Поэтому используйте его снаружи в контроллере представления как необязательный любой отменяемый тип. Приведенный ниже код должен работать.
class vc1: ViewController {
var subscription = AnyCancellable?
func viewdidLoad() {
self.subscription = Parent.shared.oublisehr.sink { (result) in
print(result)
}
}
func navigatetoVC1() {
///// some code to navigate to vc1
}
func button() {
self.navigatetoVC1
}
}
Комментарии:
1. можете ли вы поделиться каким-нибудь примером кода или какой-нибудь статьей?
2. У меня есть еще один вопрос: рекомендуется ли использовать модель одноэлементного представления?