Как исправить «Невозможно вызвать« отправить »без аргументов» в Swift 5.1 - PullRequest
4 голосов
/ 11 июня 2019

Я пытался следить за видео WWDC 19 «Представляем SwiftUI - Создание вашего первого приложения».Для этого доклада не приведен пример кода, но я создавал его по мере продвижения докладчика.При попытке создать хранилище я получаю сообщение об ошибке «Не удается вызвать« отправить »без аргументов» из строки:

didSet { didChange.send() }

Я новичок в программировании и пытаюсь устранить неполадки.

import SwiftUI
import Combine

class ReferenceStore : BindableObject {
    var references: [Reference] {
        didSet { didChange.send() }
    }

    init(references: [Reference] = []) {
        self.references = references
    }

    var didChange = PassthroughSubject<Void, Never>()
}

Я использую бета-версию Xcode 11 и MacOS Catalina, если это поможет.

Ответы [ 3 ]

7 голосов
/ 11 июня 2019

PassthroughSubject<Void, Never> ваш издатель, и он объявлен как:

final class PassthroughSubject<Output, Failure> where Failure : Error

И это send функция:

final func send(_ input: Output)

Это означает, что send нужен аргумент Void, который в Swift является пустым кортежем ().

Заменить:

didChange.send()

с

didChange.send(())

0 голосов
/ 25 июля 2019

В Xcode 11 beta 4 , вы можете просто использовать send () метод экземпляра.

func send()

Использование:

var references: [Reference] {
    didSet { didChange.send() }
}

Обновление :

Требования протокола BindableObject теперь willChange вместо didChange , и теперь должен быть отправлен перед объектом меняется, а не после того, как меняется. Это изменение позволяет улучшить объединение уведомлений об изменениях.

Поэтому измените свой код на

class ReferenceStore : BindableObject {
    var references: [Reference] {
        didSet { willChange.send() }
    }

    init(references: [Reference] = []) {
        self.references = references
    }

    var willChange = PassthroughSubject<Void, Never>()
}
0 голосов
/ 11 июня 2019

Замените ваш код на

class ReferenceStore : BindableObject {
    var references: [Reference] {
        didSet { didChange.send(self) }
    }

    init(references: [Reference] = []) {
        self.references = references
    }

    var didChange = PassthroughSubject<ReferenceStore, Never>()
}
...