Ios 当SwiftUI已经导入联合收割机时,为什么需要导入它?

Ios 当SwiftUI已经导入联合收割机时,为什么需要导入它?,ios,swift,swiftui,combine,Ios,Swift,Swiftui,Combine,我正在尝试收听@State的更改并进行跟踪。这是我的密码: import SwiftUI struct ContentView: View { @State var isOn = false var body: some View { Toggle("Selection", isOn: $isOn) .onReceive(Just(isOn)) { isOn in print(

我正在尝试收听
@State
的更改并进行跟踪。这是我的密码:

import SwiftUI

struct ContentView: View {
    @State var isOn = false
    
    var body: some View {
        Toggle("Selection", isOn: $isOn)
            .onReceive(Just(isOn)) { isOn in
                print("Toggle is on? \(isOn)")
            }
    }
}
它没有编译:我得到“在范围中找不到'Just'”

。但是,我以为迅捷已经进口了联合收割机?我的命令单击了导入快捷界面,然后按下跳转到定义,它就在顶部

跳转到定义
导入联合收割机
位于顶部
仅仅因为您从某个框架/库(模块a)导入,并不自动意味着您可以访问模块a导入的文件中的所有类型(模块B、C、D),您刚刚导入了
a

一个完美的例子就是您正在经历的情况,
SwiftUI
导入了
Combine
,但是如果您自己没有明确导入
Combine
,您就不能在代码中使用

然而,这并非总是正确的。例如,
CGFloat
是在
CoreGraphics
中定义的,但是如果导入
SwiftUI
,您就可以访问它。如果只导入
Foundation
,则您无权访问它。当然,这不是一个完美的例子,因为你的问题引用了两个快捷的框架,而核心图形和基础来自Objul-C世界。 为了使您不必导入
联合收割机
,SwiftUI框架必须为您导出联合收割机。这可以使用
@\u export


由于没有这样做,当你想使用它的类型时,你必须导入
Combine
,就像你要导入
CoreData
如果你想使用
CoreData
类型,你必须导入
Combine
,即使像
Combine
一样,它是由SwiftUI导入(但不是导出)的。

它拉入名称空间,尝试
Combine.just(isOn)
不带
导入联合收割机
模块不是目标c/c标题-导入仅在导入的实际位置可见。