gpt4 book ai didi

ios - 为什么 SwiftUI 已经导入了 Combine,我还需要导入它?

转载 作者:行者123 更新时间:2023-12-05 01:07:33 38 4
gpt4 key购买 nike

我正在尝试监听 @State 的变化并关注 this answer .这是我的代码:

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'”

Cannot find 'Just' in scope with the line containing 'Just' highlighted

Just is part of the Combine framework .但是,我认为 SwiftUI 已经导入了 Combine?我Command-单击import SwiftUI,然后按Jump to Definition,它就在顶部。

<头>
跳转到定义 import Combine 位于顶部
Jump to Definition in popup menu Line 1 of SwiftUI file is import Combine

一旦我将 import Combine 添加到我的代码中,它就会编译。但这不应该是多余和不必要的吗?

Build succeeded

最佳答案

仅仅因为您从某个框架/库(模块 A)导入并不意味着您可以访问您导入的文件中模块 A 导入的所有类型(模块 B、C、D)< em>只是 A.

你正在经历的就是一个完美的例子,SwiftUI 导入 Combine,但你不能在代码中使用 Just无需自己显式导入 Combine

然而,这并不是真正的所有时间。例如,CGFloat 是在 CoreGraphics 中定义的,但如果你导入 SwiftUI,你就可以访问它。如果您只导入 Foundation,您没有 可以访问它。当然,这不是一个完美的例子,因为您的问题引用了两个 Swift 框架,而 CoreGraphics 和 Foundation 来自于 Objective-C 世界。

为了让你不必导入Combine,SwiftUI 框架必须为你导出Combine。这可以使用 @_export 来完成:

由于这还没有完成,当你想使用它的类型时,你被困在导入 Combine 中,就像你必须导入 CoreData 如果你想使用CoreData 类型,尽管像 Combine 一样,它是由 SwiftUI 导入(但不导出)的。

关于ios - 为什么 SwiftUI 已经导入了 Combine,我还需要导入它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67353167/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com