Тип '()' не может соответствовать 'View'; только типы struct / enum / class могут соответствовать протоколам, вызывающим функции с быстрым пользовательским интерфейсом - PullRequest
0 голосов
/ 23 марта 2020

У меня есть структура Swift UI под названием MyWatchView с этим стеком.

            VStack (alignment: .center)
            {
                HStack
                {
                    Toggle(isOn: $play)
                    {
                        Text("")


                    }
                    .padding(.trailing, 30.0)
                    .hueRotation(Angle.degrees(45))
                    if play
                    {
                        MyWatchView.self.playSound()
                    }
                }
            }

Также имеет @State private var play = false; И функция playSound, подобная этой:

    static private func playSound()
    {
        WKInterfaceDevice.current().play(.failure)
    }

Я получаю ошибку Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols Я думаю, что это, вероятно, что-то, что я не понимаю, в том, как структуры работают в Swift.

1 Ответ

0 голосов
/ 23 марта 2020

Ваша функция MyWatchView.self.playSound () не возвращает View, поэтому вы не можете использовать его внутри HStack.

Не видя вашего полного кода, я могу только предположить, что вы хотите сделать, но вот мое предположение: если переменная состояния play имеет значение true, вы хотите выполнить fun c playSound ()?

Вы можете сделать что-то вроде этого:

@State private var play = false {
    willSet {
        if newValue {
            WKInterfaceDevice.current().play(.failure)
        }
    }
}

Это выполнит ваши состояния c забава c всякий раз, когда переменная состояния воспроизведения изменяется на true.

...