SwiftUI не имеет didSelectRowAt или чего-либо подобного, потому что он работает с состояниями, а не со стандартными обработчиками событий для изменений.
Вы должны определить переменную @State
, которая будет отслеживать текущее выбранное значение:
@State private var selectedLocale: LocaleInfo? = nil
, затем используйте конструктор init(_:selection:rowContent)
:
List(filterLocaleInfo.filter({ $0.name.hasPrefix(search) }), selection: $selectedLocale) { info in
HStack(alignment: .center) {
Image(uiImage: info.flag ?? UIImage())
VStack(alignment: .leading) {
Text(info.name)
.font(.custom("Avenir-Medium", size: 17))
Text(info.dialCode)
.font(.custom("Avenir-Book", size: 15))
}
}
}
.onAppear { self.getLocaleData() }
, где знак $
перед переменной означает, что вы связываете переменную @State
со значением выбора списка Это означает, что переменная selectedLocale
будет всегда содержать текущую выбранную локаль, и всякий раз, когда эта переменная состояния изменяется, весь вид будет пересчитываться (учитывая, что вы фактически используете эту переменную состояния где-то еще - например, в if
заявление).