Singleton SettingsManager со строгим параллелизмом Swift 6IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Singleton SettingsManager со строгим параллелизмом Swift 6

Сообщение Anonymous »

Я пытаюсь перенести свое (крошечное) приложение для MacOS и iOS на Swift 6.
У меня есть следующий одноэлементный класс SettingsManager:

Код: Выделить всё

final class SettingsManager: ObservableObject {
static let shared = SettingsManager()
private init() {}

@AppStorage("showTimeLeft") var showTimeLeft = true
@AppStorage("hideAppOnTimerStart") var hideAppOnTimerStart = false
// More settings here
}
Этот класс используется в разных местах моего приложения, как в следующем псевдокоде:

Код: Выделить всё

if SettingsManager.shared.showTimeLeft {
Text("Time left here")
}
Как правильно перенести этот класс на Swift 6? Сейчас я получаю следующую ошибку:

Как правильно перенести этот класс на Swift 6? В настоящее время я получаю следующую ошибку:

Как правильно перенести этот класс на Swift 6? В настоящее время я получаю следующую ошибку:

Как правильно перенести этот класс на Swift 6? p>

Статическое свойство «shared» не является безопасным для параллелизма, поскольку тип «SettingsManager», отличный от «Sendable», может иметь общее изменяемое состояние
< /blockquote>
XCode дает мне три варианта:
  • Класс SettingsManager не соответствует протоколу Sendable
    < li>Добавьте аннотацию «shared» с помощью @MainActor, если доступ к свойству должен быть доступен только от главного актера.
  • Отключите проверки безопасности параллелизма, если доступ защищен механизмом внешней синхронизации.
Первый вариант (приведение SettingsManager в соответствие с Sendable) выдает новую ошибку: «Сохраненное свойство '_showTimeLeft' класса 'SettingsManager', соответствующего 'Sendable', является изменяемым" >
Аннотирование всего класса с помощью @MainActor работает, поскольку удаляет все ошибки, но считается ли это хорошей практикой? Я пока мало что знаю о Swift, но я уверен, что @MainActor в первую очередь предназначен для кода пользовательского интерфейса? Однако я могу ошибаться.
Третий вариант, я думаю, здесь не применим.

P.S.: Я действительно не знаю, что делаю, и вполне возможно, что этот одноэлементный шаблон вообще является ужасной идеей --- просто дайте мне знать, если это так.

Подробнее здесь: https://stackoverflow.com/questions/793 ... oncurrency
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»