作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包装到 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: Int
和 var 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/
我是一名优秀的程序员,十分优秀!