首页 > 解决方案 > 如何修复 onReceive 方法调用的这个 Swift 编译器错误?

问题描述

我使用 Xcode 11.1 在操场上隔离了这段代码:


import SwiftUI
import PlaygroundSupport

struct ContentView: View {
    @State var name: String = ""

    var body: some View {
        List {
            Text(String(describing: name))
            TextField("First Name", text: $name)
        }.onReceive($name) { n in
            print("hey \(n)")
        }
    }
}

let uv = ContentView()
PlaygroundPage.current.liveView = UIHostingController(rootView: uv)

除非我省略 onReceive 部分,否则这不会编译。错误消息是“无法推断闭包类型”,但注释该方法似乎只给了我其他错误,而不是编译的东西。

如何更正此代码段?

标签: swiftswiftui

解决方案


onReceive函数采用 Publisher 类型,因此您必须更改$namename.publisher.

var body: some View {
        List {
            Text(String(describing: name))
            TextField("First Name", text: $name)
        }.onReceive(name.publisher) { n in
            print("hey \(n)")
        }
    }

推荐阅读