skip to Main Content
TextField("search", text: $searchText)
    .accentColor(Color("ClickableLink"))
    .foregroundColor(.white)
    .focused($focusedField, equals: .field)
    .onAppear {
        self.focusedField = .field
    }
    .onSubmit {
        loadinglayout = true

        do {
            try await getMemes()
        }
        catch {
            print(error)
        }
    }

I get

"Cannot pass function of type ‘() async -> Void’ to parameter expecting synchronous function type"

inside onSubmit.

So far the

do 

method solved this kind of issues, why not here? I have absolutely no idea what else I could try

2

Answers


  1. The problem is that you are trying to call an async method from a synchronous method. onSubmit is synchronous, while getMemes is async.

    You need to wrap async methods in a Task if you want to call them from a synchronous context.

    .onSubmit {
        loadinglayout = true
        Task {
            do {
                try await getMemes()
            }
            catch {
                print(error)
            }
        }
    }                            
    
    Login or Signup to reply.
  2. If you are calling async function inside button

    Button {
             Task{
                   await fetchData()
                 }
           } label: {
                   Text("Refresh Time")
           }
    

    it will wait for function to return data.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search