相关疑难解决方法(0)

了解SwiftUI中的@Binding

我观看了一些有关数据绑定的WWDC视频和Apple文档,根据我目前的理解,@ State作为属性委托,将在视图和带注释的属性之间提供绑定连接,例如:

@State var myText: String

var body: some View {
  VStack {
    TextField($myText, placeholder: Text("input"))
    Text(myText)
  }
}
Run Code Online (Sandbox Code Playgroud)

这会将myTest与我添加的文本字段的内容绑定在一起(即,一项更改将跟进另一项更新)

但是,尽管我知道$ myText指的是Binding的绑定类型,但我注意到Binding也是属性委托,并且我注意到它出现在Apple的一些代码示例中。我不知道这是什么用作属性委托。@State已经可以进行绑定了,那么我们需要@Binding做什么呢?苹果文档对此很烂。

swift swiftui

7
推荐指数
5
解决办法
7483
查看次数

SwiftUI从var body调用变异函数

在Ray遵循的教程中,我设置了以下属性

struct ContentView : View {

    var rTarget = Double.random(in: 0..<1)
    var gTarget = Double.random(in: 0..<1)
    var bTarget = Double.random(in: 0..<1)
}
Run Code Online (Sandbox Code Playgroud)

这些当然是不可变的,因此除非我将该功能标记为变异的,否则我无法通过功能对其进行修改

func reset() {
    rTarget = Double.random(in: 0..<1)
    gTarget = Double.random(in: 0..<1)
    bTarget = Double.random(in: 0..<1)
}
Run Code Online (Sandbox Code Playgroud)

Cannot assign to property: 'self' is immutable

但我称此功能为 var body

mutating func reset() {
    rTarget = Double.random(in: 0..<1)
    gTarget = Double.random(in: 0..<1)
    bTarget = Double.random(in: 0..<1)
}

fileprivate mutating func displayAlert() -> Alert {
    return Alert(title: Text("Your Score"), message: Text("\(computeScore())"), dismissButton: …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui xcode11

7
推荐指数
1
解决办法
627
查看次数

@propertyDelegate和@propertyWrapper之间的区别

@propertyWrapper和之间有@propertyDelegate什么区别?他们在所有WWDC19视频中都谈到@propertyWrapper,但是所有实际的实现方式都使用@propertyDelegate(即SwiftUI-State);编译器Xcode 11 Beta似乎接受两者并要求完全相同的要求:

@propertyDelegate struct A {

}
// Property delegate type 'A' does not contain a non-static property named 'value'
Run Code Online (Sandbox Code Playgroud)
@propertyWrapper struct A {

}
// Property delegate type 'A' does not contain a non-static property named 'value'
Run Code Online (Sandbox Code Playgroud)

请注意,在两种情况下,编译器均会显示“属性委托”

我是否想念某些东西,或者是因为他们尚未决定使用哪个名称?

swift swift5.1

4
推荐指数
1
解决办法
968
查看次数

SwiftUI:在推送另一个视图之前,如何获取列表中的选定行

另一个SwiftUI斗争!

我有一个包含列表的视图。当用户点击一行时,我想先将所选项目保存在我的VM中,然后再推送另一个视图。我能想到的解决该问题的唯一方法是,首先保存选定的行,然后使用另一个按钮来推送下一个视图。似乎仅需轻按一下即可完成此操作。

有人知道吗?

这是代码:

struct AnotherView : View {
    @State var viewModel = AnotherViewModel()

    var body: some View {
        NavigationView {
            VStack {
                    List(viewModel.items.identified(by: \.id)) { item in
                        NavigationLink(destination: DestinationView()) {
                            Text(item)
                        }
                        // Before the new view is open, I want to save the selected item in my VM, which will write to a global store.
                        self.viewModel.selectedItem = item
                    }
                }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

ios swift swiftui

3
推荐指数
2
解决办法
1872
查看次数

标签 统计

swift ×4

swiftui ×3

ios ×2

swift5.1 ×1

xcode11 ×1