#ios #swift #macos #swiftui #watchos
#iOS #swift #macos #swiftui #watchos
Вопрос:
У меня есть следующий код в ContentView.swift
файле:
struct ContentView: View {
@State private var selectedSpeed: Int = 1
var body: some View {
Text("Hello World")
}
}
Я упростил его для удобства чтения. Я знаю, что selectedSpeed
это не используется.
В строке, где selectedSpeed
объявлено, я получаю следующую ошибку: структура ‘State’ не может использоваться в качестве атрибута
Интересно, что вставка точно такого же кода на игровой площадке успешно выполняется. Я использую Xcode 12.1. Я пробовал комбинацию удаления производных данных и повторного открытия Xcode, но ошибка сохраняется. Есть идеи, что здесь не так?
Ответ №1:
Оказалось, что у меня был struct
вызван State
в моем проекте, и это вызвало проблему.
TL; DR: никогда не вызывайте ни одну из ваших структур и, возможно, классов, State, если вы планируете использовать SwiftUI. Я бы расширил его, чтобы не называть какие-либо из ваших классов или структур чем-то, что противоречит оболочке свойств.
Это также объясняет, почему на игровой площадке все было в порядке.
Навигатор отчетов на самом деле давал мне подсказку
Комментарии:
1. Черт возьми. То же самое для меня. Просто на всякий случай изменил мои объекты на: stateObj, CityObj и CountryObj.
2. Спасибо, что поделились причиной этой проблемы. Вы только что сэкономили мне часы, когда я ломал голову.
3. Спасибо за ваш комментарий. Это основная причина, по которой я решил поделиться в первую очередь! Я уже потерял пару часов, понимая, что было не так: D
Ответ №2:
Имя State
не защищено, и в соответствии с вашим ответом / ответом, который вы State
объявили в другом месте, либо в своем собственном приложении, либо внутри зависимости, которую вы можете импортировать в этот файл.
Вы можете указать компилятору, какой символ использовать, явно установив правильное «Пространство имен».
Например:
struct ContentView: View {
@SwuiftUI.State private var selectedSpeed: Int = 1
var body: some View {
Text("Hello World")
}
}