类型“()”不能符合 'View'
Type '()' cannot conform to 'View'
抱歉,我对 SwiftUI 还是个新手,我正在为在视图中输出随机字符串而苦苦挣扎。由于我得到的错误“Type '()' cannot conform to 'View”,我了解到 View 不是写下函数本身的合适位置。我应该怎么做才能输出itemX.randomElement()和itemY.randomElement()。
感谢任何帮助。
struct SummaryView: View {
var avgValue = 1.5
var roundedKarvonenValue: Double
var itemX = ["A", "B", "C", "D", "E", "F", "G", "H"]
var itemY = ["I", "J", "K", "L", "M", "N", "O", "P"]
var body: some View {
ScrollView {
VStack(alignment: .leading) {
if workoutManager.averageHeartRate < roundedKarvonenValue{
print(itemX.randomElement()!)
}else{
print(itemY.randomElement()!)
}
这个问题有很多东西要解压,但我们先从简单的开始。 Views
用于在屏幕上显示内容。而已。 print()
语句出现问题的原因是它们用于打印到控制台,而不是屏幕。因此,编译器会报错。要解决此问题,请使用 Text
就像@JoakimDanielson 所说:
struct SummaryView: View {
var workoutManager: WorkoutManager //This var must be declared
var avgValue = 1.5
var roundedKarvonenValue: Double
var itemX = ["A", "B", "C", "D", "E", "F", "G", "H"]
var itemY = ["I", "J", "K", "L", "M", "N", "O", "P"]
var body: some View {
ScrollView {
VStack(alignment: .leading) {
if workoutManager.averageHeartRate < roundedKarvonenValue{
Text(itemX[0])
} else {
Text(itemY[0])
}
}
}
}
}
至于你的第二部分关于在哪里放置你的功能,没有那么明确。您应该查看 MVVM 架构以了解在 SwiftUI 中构建应用程序的标准方式。现在,您只是使用 Apple 的 WWDC class WorkoutManager
(我想)显示来自 HealthKit
的数据。
在最基本的层面上,如果您的功能与更改数据的显示方式有关,它会保留在 View
中。如果该函数从根本上改变了您的 Model
或多个视图需要它,它应该进入 Model
。这是一个判断电话。
因此,对于您的代码,您要显示视图中声明的变量中的随机元素。那都是本地的东西,所以该功能保留在视图中。添加 func randomElement()
并进一步清理您的代码,您将得到以下结果:
struct SummaryView: View {
// If you are not changing the variables, declare them as constants. This uses less memory.
let workoutManager: WorkoutManager
let avgValue = 1.5
let roundedKarvonenValue: Double
let itemX = ["A", "B", "C", "D", "E", "F", "G", "H"]
let itemY = ["I", "J", "K", "L", "M", "N", "O", "P"]
var body: some View {
ScrollView {
VStack(alignment: .leading) {
// I turned your if statement into a Terniary Conditional Operator to shrink the amount of code.
Text(workoutManager.averageHeartRate < roundedKarvonenValue ? randomElement(itemX) : randomElement(itemY))
}
}
}
func randomElement(_ stringArray: [String]) -> String {
let end = stringArray.count - 1
let index = Int.random(in: 0...end)
return stringArray[index]
}
}
您可以像这样在视图中使用打印语句:
if workoutManager.averageHeartRate < roundedKarvonenValue{
let _ = print(itemX.randomElement()!)
}else{
let _ = print(itemY.randomElement()!)
}
抱歉,我对 SwiftUI 还是个新手,我正在为在视图中输出随机字符串而苦苦挣扎。由于我得到的错误“Type '()' cannot conform to 'View”,我了解到 View 不是写下函数本身的合适位置。我应该怎么做才能输出itemX.randomElement()和itemY.randomElement()。 感谢任何帮助。
struct SummaryView: View {
var avgValue = 1.5
var roundedKarvonenValue: Double
var itemX = ["A", "B", "C", "D", "E", "F", "G", "H"]
var itemY = ["I", "J", "K", "L", "M", "N", "O", "P"]
var body: some View {
ScrollView {
VStack(alignment: .leading) {
if workoutManager.averageHeartRate < roundedKarvonenValue{
print(itemX.randomElement()!)
}else{
print(itemY.randomElement()!)
}
这个问题有很多东西要解压,但我们先从简单的开始。 Views
用于在屏幕上显示内容。而已。 print()
语句出现问题的原因是它们用于打印到控制台,而不是屏幕。因此,编译器会报错。要解决此问题,请使用 Text
就像@JoakimDanielson 所说:
struct SummaryView: View {
var workoutManager: WorkoutManager //This var must be declared
var avgValue = 1.5
var roundedKarvonenValue: Double
var itemX = ["A", "B", "C", "D", "E", "F", "G", "H"]
var itemY = ["I", "J", "K", "L", "M", "N", "O", "P"]
var body: some View {
ScrollView {
VStack(alignment: .leading) {
if workoutManager.averageHeartRate < roundedKarvonenValue{
Text(itemX[0])
} else {
Text(itemY[0])
}
}
}
}
}
至于你的第二部分关于在哪里放置你的功能,没有那么明确。您应该查看 MVVM 架构以了解在 SwiftUI 中构建应用程序的标准方式。现在,您只是使用 Apple 的 WWDC class WorkoutManager
(我想)显示来自 HealthKit
的数据。
在最基本的层面上,如果您的功能与更改数据的显示方式有关,它会保留在 View
中。如果该函数从根本上改变了您的 Model
或多个视图需要它,它应该进入 Model
。这是一个判断电话。
因此,对于您的代码,您要显示视图中声明的变量中的随机元素。那都是本地的东西,所以该功能保留在视图中。添加 func randomElement()
并进一步清理您的代码,您将得到以下结果:
struct SummaryView: View {
// If you are not changing the variables, declare them as constants. This uses less memory.
let workoutManager: WorkoutManager
let avgValue = 1.5
let roundedKarvonenValue: Double
let itemX = ["A", "B", "C", "D", "E", "F", "G", "H"]
let itemY = ["I", "J", "K", "L", "M", "N", "O", "P"]
var body: some View {
ScrollView {
VStack(alignment: .leading) {
// I turned your if statement into a Terniary Conditional Operator to shrink the amount of code.
Text(workoutManager.averageHeartRate < roundedKarvonenValue ? randomElement(itemX) : randomElement(itemY))
}
}
}
func randomElement(_ stringArray: [String]) -> String {
let end = stringArray.count - 1
let index = Int.random(in: 0...end)
return stringArray[index]
}
}
您可以像这样在视图中使用打印语句:
if workoutManager.averageHeartRate < roundedKarvonenValue{
let _ = print(itemX.randomElement()!)
}else{
let _ = print(itemY.randomElement()!)
}