如何在Swift 5.1中修复“无法不带参数地调用'发送'”

时间:2019-06-11 16:24:45

标签: swift swiftui combine

我一直在尝试观看“ SwiftUI简介-构建您的第一个应用程序” WWDC 19视频。本演讲没有提供示例代码,但随着演示者的进行,我一直在创建它。尝试创建存储时,我从以下行收到“无法调用无参数的'发送'的错误”:

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 beta和MacOS Catalina。

3 个答案:

答案 0 :(得分:6)

PassthroughSubject<Void, Never>是您的发布者,它声明为:

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

这是send函数:

final func send(_ input: Output)

这意味着send需要一个Void参数,在Swift中是空元组()

替换:

didChange.send()

使用

didChange.send(())

答案 1 :(得分:0)

将代码替换为

UIButton

答案 2 :(得分:0)

Xcode 11 beta 4 中,您可以仅使用send()实例方法。

func send()

用法:

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

更新

  

BindableObject协议的要求现在为将更改   而不是 didChange ,现在应该在对象之前发送   变化,而不是变化之后。此更改允许改进   合并变更通知。

因此将您的代码更改为

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

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

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