【问题标题】:Swift @Binding initSwift @Binding 初始化
【发布时间】:2021-09-26 05:17:03
【问题描述】:

如何使用所需的包装值手动初始化 Swift 绑定?

使用 Bool 作为类型,这是最基本的所需 init

let b: Binding<Bool> = Binding.init(true) //错误信息:

Cannot convert value of type 'Bool' to expected argument type 'Binding<Bool?>

Value of optional type 'Binding<Bool>?' must be unwrapped to a value of type 'Binding<Bool>'

我的问题

  1. 为什么会出现上述错误?
  2. 初始化简单 Bool 绑定的正确语法是什么
  3. 为什么必须在类型签名中包含可选参数 ()

【问题讨论】:

  • 你的意思是Binding<Bool>.constant(true)
  • Binding.init(Boolean) 不是 Binding 的值初始化器。您能详细说明您要完成的工作吗?绑定通常用于 SwiftUI 或(可能)Combine 中的双向通信。初始化绑定后没有 @State@Published 属性(或在自定义绑定中写入的其他内容)是可疑的。也许如果您描述了您要完成的工作,有人可以帮助您找到解决方案。
  • @jnpdx,谢谢,@State var bool: Bool = true 似乎在出售 Binding<Bool> 。我试图用一个 WrappedValue 手动初始化一个 Binding ,看看我是否理解它们是如何创建的。
  • 也许这对你有帮助。 stackoverflow.com/questions/56973959/…
  • 绑定是一种双向连接,它不意味着在没有事实来源的情况下进行初始化。它有 .constant 为预览做一个死胡同它只是一个死胡同作为真相的来源

标签: swift swiftui


【解决方案1】:

你宁愿需要@State。如果您想要默认初始值以及设置它的机会,请考虑这一点。

@State var a: Bool
init(initialA: Bool = true) {
    _a = .init(initialValue: initialA)
} 

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 2021-07-14
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2019-10-04
    • 2016-02-16
    • 2017-07-21
    相关资源
    最近更新 更多