类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议
Posted
技术标签:
【中文标题】类型 \'()\' 不能符合 \'View\';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议【英文标题】:Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols calling calling functions with swift ui类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议 【发布时间】:2020-03-23 14:45:17 【问题描述】:我有一个名为 MyWatchView 的 SwiftUI 视图和这个堆栈:
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】:您的 MyWatchView.self.playSound() 函数没有返回视图,因此您不能在 HStack 中使用它。
没有看到你的完整代码,我只能假设你想做什么,但这是我的猜测:如果状态变量 play 为真,你想执行 func playSound()?
你可以这样做:
@State private var play = false
willSet
if newValue
WKInterfaceDevice.current().play(.failure)
只要 State 变量 play 更改为 true,这将执行您的静态函数。
【讨论】:
@Asperi 如果您能指导我,我将不胜感激。它适用于我的测试应用程序。 :) 感谢您的回答,但我怎么能用这个功能做到这一点?我正在尝试使用计时器来触发播放声音功能。这是我的 ios 应用程序中的视图控制器类中的代码timer = Timer.scheduledTimer(timeInterval: interval, target: click class, selector: #selector(clickClass.repeatSound), userInfo: clickClass, repeats: switchView.isOn)
以上是关于类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议的主要内容,如果未能解决你的问题,请参考以下文章
类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议
type() 不能符合 View;只有结构/枚举/类类型可以符合协议
“类型‘()’不能符合‘视图’;只有结构/枚举/类类型可以符合协议”