Home > other >  Convert String to Binding<String> in Swift
Convert String to Binding<String> in Swift

Time:01-31

Most of the solutions I see are partaining to SwiftUI where a string can be passed as a Binding String like this

TextField("", $text)

But in this case, it's purely on Swift... I have this code below

final class Coordinator: NSObject, UITextViewDelegate {
    var text: Binding<String>

    init(text: Binding<String>) {
        self.text = text
    }
    
    func myFunc(){
        let string = "my string" // a dynamically created String
        self.text = string // This throws an error that I cannot assign value type of string to Binding<String>
    }
}

How can I get to convert String to Binding<String>?

CodePudding user response:

The name Coordinator suggests that we are talking about UIViewRepresentable.

If so the usual way is to declare the Binding in the UIViewRepresentable struct and pass the MyView instance to the coordinator to have access to it

struct MyView: UIViewRepresentable
{
    @Binding var text: String
    
    func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }
...

final class Coordinator: NSObject, UITextViewDelegate {
    var parent: MyView

    init(_ parent: MyView) {
        self.parent = parent
    }
    
    func myFunc(){
        let string = "my string" // a dynamically created String
        parent.text = string
    }
}
  • Related