类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议

Der*_*ews 7 struct func swift watchos swiftui

我有一个带有此堆栈的名为 MyWatchView 的 SwiftUI 视图:

VStack (alignment: .center)
{
    HStack
    {
        Toggle(isOn: $play)
        {
            Text("")
        }
        .padding(.trailing, 30.0)
        .hueRotation(Angle.degrees(45))
        if play
        {
            MyWatchView.self.playSound()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它还具有如下@State private var play = false功能playSound

static private func playSound()
{
    WKInterfaceDevice.current().play(.failure)
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols我认为这可能是我不理解结构在 Swift 中的工作方式。

Kev*_*inP 5

您的 MyWatchView.self.playSound() 函数不会返回视图,因此您无法在 HStack 中使用它。

如果没有看到你的完整代码,我只能假设你想要做什么,但这是我的猜测:如果状态变量 play 为 true,你想执行 func playSound() 吗?

你可以这样做:

@State private var play = false {
    willSet {
        if newValue {
            WKInterfaceDevice.current().play(.failure)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每当 State 变量 play 更改为 true 时,这将执行您的静态函数。