如何在 Swift 5.1 中修复“无法在没有参数的情况下调用‘发送’”
Posted
技术标签:
【中文标题】如何在 Swift 5.1 中修复“无法在没有参数的情况下调用‘发送’”【英文标题】:How to fix "Cannot invoke 'send' with no arguments" in Swift 5.1 【发布时间】:2019-06-11 16:24:45 【问题描述】:我一直在尝试关注“介绍 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。
【问题讨论】:
【参考方案1】:PassthroughSubject<Void, Never>
是您的发布者,它被声明为:
final class PassthroughSubject<Output, Failure> where Failure : Error
这是send
函数:
final func send(_ input: Output)
这意味着send
需要一个Void
参数,在Swift 中是空元组()
。
替换:
didChange.send()
与
didChange.send(())
【讨论】:
【参考方案2】:将您的代码替换为
class ReferenceStore : BindableObject
var references: [Reference]
didSet didChange.send(self)
init(references: [Reference] = [])
self.references = references
var didChange = PassthroughSubject<ReferenceStore, Never>()
【讨论】:
【参考方案3】:在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>()
【讨论】:
以上是关于如何在 Swift 5.1 中修复“无法在没有参数的情况下调用‘发送’”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 的操场上修复“调用中的额外参数 'at'”
如何在Swift 3中修复我的自定义UITextField对象?
试图在 Swift 5.1 中将 UIImage 转换为 PFFileObject
Xcode 7.0.1 - 无效的 Swift 支持 - cocoapods 如何修复?