gpt4 book ai didi

ios - @Binding var a : Int and Binding in SwiftUI? 之间的区别

转载 作者:行者123 更新时间:2023-12-02 19:21:19 24 4
gpt4 key购买 nike

我有一个包装到 SwiftUI View 中的 UIPageViewController。该 View 是用 @Binding 实例化的值:

PageView([Text("Hello")], currentPage: $page)

我有一些内部状态,我想根据传入的 @Binding 进行更改。变量。

    @State var currentPageIndex: Int
@State var goRight: Bool?

public var currentPage: Binding<Int> {
Binding(
get: {
return self.currentPageIndex
},
set: {
self.goRight = ((self.currentPageIndex - $0) > 0)
self.currentPageIndex = $0
}
)
}

当我尝试根据这个索引设置 UIPageViewController 时,

pageViewController.setViewControllers([controllers[currentPage]], direction: .forward, animated: true)

此行失败并显示错误 Cannot convert value of type 'Binding<Int>' to expected argument type 'Int'

然而,当我简单地使用 @Binding不做任何事情的值(value),

@Binding var currentPage: Int

一切都编译得很好。我理解这个问题的核心是,@Binding var blah: Int 之间存在某种差异。和 var blah: Binding<Int>为什么会这样?为什么我还必须做其他事情才能访问类型的基础值 Binding<Int> ?我理解这些事情是说同一件事的两种不同方式。或者它们不等价?

最佳答案

@Binding var blah: Int

成为

var _blah: Binding<Int>
var blah: Int {
get {
_blah.wrappedValue
}
set {
_blah.wrappedValue = newValue
}
}

这意味着如果你有一个 @Binding var foo: Intvar bar: Binding<Int> , 以下是您将如何做等效的事情:

struct MyView: View {
//assume these are correctly initialized
@Binding var foo: Int
var bar: Binding<Int>

var body: some View {
//some body
}

func example() {
// these are equivalent
foo == bar.wrappedValue
_foo == bar
}
}

关于ios - @Binding var a : Int and Binding<Int> in SwiftUI? 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63022030/

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