#swift #swiftui #swiftui-environment
#swift #swiftui #swiftui-environment
Вопрос:
Я пытаюсь создать свою собственную версию UISearchBar
SwiftUI для целей обучения.
Я следовал этому руководству
и на данный момент моя структура панели поиска выглядит следующим образом:
import Foundation
import SwiftUI
struct SearchBarUI: View {
@Binding var searchText:String
var textColor:Color
var boxColor:Color
var boxHeight:CGFloat
public init(_ text:Binding<String>, textColor:Color, boxColor:Color, boxHeight:CGFloat) {
self._searchText = text
self.textColor = textColor
self.boxColor = boxColor
self.boxHeight = boxHeight
}
var body: some View {
HStack {
Image(systemName: "magnifyingglass")
.padding(.leading, -10)
.foregroundColor(.secondary)
TextField("Search", text: $searchText, onCommit: {
UIApplication.shared.windows.first { $0.isKeyWindow }?.endEditing(true)
})
.padding(.leading, 10)
Button(action: {
self.searchText = ""
}) {
Image(systemName: "xmark.circle.fill")
.foregroundColor(.secondary)
.opacity(searchText == "" ? 0 : 1)
.animation(.linear)
}
}.padding(.horizontal)
}
}
Но вот в чем проблема.
Когда я использую эту панель поиска в contentView, я хочу, чтобы текстовая переменная поиска была такой:
class GlobalVariables: ObservableObject {
@Published var searchText:String = ""
}
@EnvironmentObject var globalVariables : GlobalVariables
SearchBarUI(globalVariables.searchText,
textColor:.black,
boxColor:.gray,
boxHeight:50)
поскольку значение текста поиска должно распространяться на другие элементы интерфейса, которые будут реагировать на изменение.
Но затем у меня появляется эта ошибка в SearchBarUI
строке, указывающая на globalVariables.searchText
:
Cannot convert value of type 'String' to expected argument type 'Binding<String>'
Как мне это решить?
Комментарии:
1. Вам нужна привязка, но сначала какая
globalVariables
и чтоthrottleModel
в ней?2. извините, опечатка. Я исправил.
Ответ №1:
Вот как передать привязку для наблюдаемого объекта, опубликованного свойства
@EnvironmentObject var globalVariables : GlobalVariables
// ... other code
SearchBarUI($globalVariables.searchText, // << here !!
Комментарии:
1. Ради всего святого. очевидно! Я новичок в SwiftUI, и мой мозг не может ее охватить. Спасибо