До iOS 17 этот код не компилируется:
class AuthManager: ObservableObject {
@Published var accessToken: String?
@Published var refreshToken: String?
@Published var isAuthenticated: Bool { // NOT ALLOWED TO BE PUBLISHED
return accessToken != nil && refreshToken != nil
}
// initializers
}
Следуя руководству по миграции от Apple, которое предлагает заменить ObservableObject на Observable и удалить все оболочки свойств @Published. И после этого компилируется следующее:
@Observable
class AuthManager {
var accessToken: String?
var refreshToken: String?
var isAuthenticated: Bool {
return accessToken != nil && refreshToken != nil
}
}
И я действительно могу использовать isAuthenticated в качестве опубликованной переменной состояния. Так как же так? Поскольку оно вычислено, как SwiftUI определит, изменилось ли оно? И будет ли это работать, если вычисление будет нетривиальным? например вычисляется с использованием результата http-запроса.
РЕДАКТИРОВАТЬ
"Нетривиальный" пример:
var isAuthenticated: Bool {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else { return false }
let request = URLRequest(url: url)
do {
let (data, _) = try await URLSession.shared.upload(
for: request,
from: someLoginData
)
} catch {
return false
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-ios-17
Почему вычисляемые свойства можно публиковать в iOS 17? ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вычисляемые свойства C#, доступные только для чтения, должны ли они быть методами?
Anonymous » » в форуме C# - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-