类型'()'不符合'视图';只有struct / enum / class类型可以符合协议;使用SwiftUI调用函数

时间:2020-03-28 20:49:09

标签: ios struct swiftui watchos

我在这个堆栈中有一个名为MyWatchView的Swift UI结构。

        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)
}

我收到类型'()'的错误,不符合'View';只有struct / enum / class类型可以符合协议,我认为这可能是我在Swift中使用struct的方式不了解的东西。 我正在尝试使用计时器来触发播放声音功能。这是我的iOS故事板应用timer = Timer.scheduledTimer(timeInterval: interval, target: click class, selector: #selector(clickClass.repeatSound), userInfo: clickClass, repeats: switchView.isOn)

中View Controller类中的代码

1 个答案:

答案 0 :(得分:6)

您正在这样做:

Void

在仅需要()的情况下。该函数的返回类型为Toggle(或Button),这就是您收到错误的原因。


如果您想在单击Button(action: { MyWatchView.self.playSound() }) { Text("") } 播放声音,则可能要改用Toggle

Bool

如果您想使用Toggle(isOn: $play) { Text("") } .padding(.trailing, 30.0) .hueRotation(Angle.degrees(45)) .onTapGesture { MyWatchView.self.playSound() } (例如,更新import React, {useState, useEffect, Fragment} from "react" 变量),可以执行以下操作:

return (
   <Fragment>
        {renderYoutubePlaylistItems(youtubePlaylistItems)}
   </Fragment>
    )