【问题标题】:How do I change the variable "url" which is inside of a class by using a struct? in swift如何使用结构更改类内部的变量“url”?迅速
【发布时间】:2022-01-21 19:42:22
【问题描述】:

我是 swift 新手,我不知道如何通过输入结构中的 Binding var url 来更改 url 变量。无论我如何尝试,我都会不断出错。任何帮助都将不胜感激

struct SearchView : View {
    
    @State var showSearchView = true
    @State var color = Color.black.opacity(0.7)
    **@Binding var url: String**
    @ObservedObject var Books = getData()
    
    var body: some View{
        

        if self.showSearchView
        {
            NavigationView{
                
                List(Books.data) {i in 
....}

class getData : ObservableObject{
    
    @Published var data = [Book]()
    **var url** = "https://www.googleapis.com/books/v1/volumes?q=harry+potter"
    
    init() {....}

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    首先,如果当前视图拥有模型对象,请使用@StateObject

    其次,请以大写字母开头的类和以小写字母开头的函数和变量。

    @StateObject var books = GetData()
    
    ...
    
    class GetData : ObservableObject {
    

    您不需要Binding 直接地址属性

    books.url = "https://apple.com"
    

    然后删除

    @Binding var url: String


    如果您需要立即显示更改后的值,请使用 @Published 属性并直接绑定它

    class GetData : ObservableObject {
    
        @Published var url = "https://www.googleapis.com/books/v1/volumes?q=harry+potter"
    
    ...
    
    
    struct SearchView : View {
       
        @StateObject var books = GetData()
        
        var body: some View {
            
            VStack{
                Text(books.url)
                TextField("URL", text: $books.url)
            }
        }
            
    }
    

    【讨论】:

      【解决方案2】:

      将第二个视图中的 *var url** = "https://www.googleapis.com/books/v1/volumes?q=harry+potter" 更改为:@State var url = "https://www.googleapis.com/books/v1/volumes?q=harry+potter",使其可以可变

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-04
        • 2013-09-01
        • 2014-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-12
        • 1970-01-01
        相关资源
        最近更新 更多