Почему вычисляемые свойства можно публиковать в iOS 17?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Почему вычисляемые свойства можно публиковать в iOS 17?

Сообщение Anonymous »

До 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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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