SwiftUI Digital Crown не работает с номерами - PullRequest
1 голос
/ 27 февраля 2020

Я бьюсь лицом о стену, пытаясь понять, почему я не могу заставить функцию .digitalCrownRotation работать с Text Компонентом пользовательского интерфейса в SwiftUI для WatchOS.

Вот мой код :

import SwiftUI

struct ButtonView: View {
    @State private var isFocused = false
    @State private var value: Int = 0

    var body: some View {
        Button(action: {
            print("clicked")
        }) {
            Text("\(value)")
            .contentShape(Rectangle())
            .focusable { self.isFocused = $0 }
            .digitalCrownRotation(self.$value, from: 0, through: 9, by: 1, sensitivity: .medium, isContinuous: true, isHapticFeedbackEnabled: true)
        }
        .background(self.isFocused ? Color.green : Color.white)
    }
}

Все работало нормально до указателя, где я пытался добавить функциональность .digitalCrownRotation.

Всякий раз, когда я пытаюсь собрать, я сталкиваюсь со следующими 2 сообщениями об ошибках сборки :

Тип аргумента 'Int.Stride' (он же 'Int') не соответствует ожидаемому типу 'BinaryFloatingPoint' Тип аргумента 'Int' не соответствует ожидаемому типу 'BinaryFloatingPoint'

Я в основном пытаюсь использовать цифровую корону, чтобы перебирать числа (целые числа) от 0 до 9, когда кнопки находятся в фокусе. Но это не работает, и я не уверен, что делать, чтобы решить это.

1 Ответ

1 голос
/ 27 февраля 2020

Вот декларация

    public func digitalCrownRotation<V>(_ binding: Binding<V>, from minValue: V, through 
                   maxValue: V, by stride: V.Stride? = nil, sensitivity: DigitalCrownRotationalSensitivity = .high, 
                   isContinuous: Bool = false, isHapticFeedbackEnabled: Bool = true) -> some View 
                   where V : BinaryFloatingPoint, V.Stride : BinaryFloatingPoint ```

, поэтому в качестве видимых сообщений и сообщений об ошибках типа V (который определяется из предоставленной привязки) должна быть плавающая точка, но ваш value равен Int, что не является плавающей точкой, поэтому исправить это просто

@State private var value: Double = 0
...