Улучшение отзывчивости интерактивного виджета SwiftUI при использовании намерений приложения.IOS

Программируем под IOS
Ответить
Anonymous
 Улучшение отзывчивости интерактивного виджета SwiftUI при использовании намерений приложения.

Сообщение Anonymous »

У меня проблема с производительностью (я думаю) моего виджета. Позвольте мне сначала объяснить, чего я хочу достичь.
Я пытаюсь создать интерактивный виджет, который действует как калькулятор. Код работает хорошо, но виджет не очень отзывчив, если я пытаюсь быстро нажать кнопки.
Я нашел хороший пример, такой как этот, который работает хорошо при быстром нажатии кнопок: https://apps.apple.com/us/app/calculato ... 6465680493
Есть ли у вас предложения по возможным улучшениям? Я думал о производительности пользовательских настроек по умолчанию, но не знал, что и думать, так как использую там лишь некоторые базовые вещи.
Спасибо за помощь.
Вот намерение, которое я использую при нажатии кнопок:
struct CalculatorDigitIntent: AppIntent {

static var title: LocalizedStringResource = "Calculator"

@Parameter(title: "Digit")
var digit: String

init() {}

init(digit: String) {
self.digit = digit
}

func perform() async throws -> some IntentResult {
UserDefaults.standard.double(forKey: "calculatorAmount")

var calculatorAmount = UserDefaults.standard.double(forKey: "calculatorAmount")

switch digit {
case "00":
if calculatorAmount != 0 {
calculatorAmount *= 100
}
case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
if let digit = Double(digit) {
if calculatorAmount != 0 || digit != 0 {
calculatorAmount = calculatorAmount * 10 + digit
}
}
default:
break
}

UserDefaults.standard.set(calculatorAmount, forKey: "calculatorAmount")

return .result()
}
}

Вот поставщик временной шкалы:
struct CalculatorProvider: AppIntentTimelineProvider {

func placeholder(in context: Context) -> FXWCalculatorEntry {
CalculatorEntry(date: Date(), amount: 0.0)
}

func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> CalculatorEntry {
CalculatorEntry(date: Date(), amount: 0.0)
}

func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline {
let digits = getCalculatorDigits()

let entry = CalculatorEntry(date: Date(), amount: digits)

let timeline = Timeline(entries: [entry], policy: .never)
return timeline
}

func getCalculatorDigits() -> Double {
return UserDefaults.standard.double(forKey: "calculatorAmount")
}
}

Насколько я понимаю из документации, каждый раз, когда вызывается намерение приложения, временная шкала будет обновляться.
В моем коде представления я просто есть простые кнопки, подобные этой:
Button(intent: CalculatorDigitIntent(digit: "4")) {
Text("4")
.font(.system(size: 20).bold())
.foregroundStyle(Color(hex: "#252F2C"))
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... pp-intents
Ответить

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

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

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

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

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