运算符函数 '>' 要求 'UserRating' 符合 'BinaryInteger' - SwiftUI ObservableObject
Operator function '>' requires that 'UserRating' conform to 'BinaryInteger' - SwiftUI ObservableObject
首先 - 这些是我使用 ObservableObjects 的第一步,也许它只是一个小错误......
我尝试创建一个带有星星的评级栏(使用 paul hudson 教程)但是有一个变量将在 2 个以上的视图中使用,所以我需要一个 ObservableObject。
评级在 Rating.swift 中创建,将在 FeedbackView.swift 中调用,FeedbackView.swift 将由 TabBar 从 EKLComplete.swift 中调用。
我用 @Binding var 尝试了 "Paul Hudson Way",但我的代码与 Pauls 教程中的代码不一样。我的观点都希望有变量,这是正确的 - 因为绑定。
据我了解,@Binding 允许我与 2 个视图共享变量,在我的例子中,我的 EKLComplete 视图也想知道该值,所以它必须是一个 ObservableObject,对吗?
创建 class 后:
class UserRating : ObservableObject {
@Published private var rating = 4
}
并在 3 个视图中使用以下代码实例化变量
@EnvironmentObject var rating : UserRating
这是我的代码,它会引发错误。
struct Rating: View {
@EnvironmentObject var rating : UserRating
var label = ""
var maximumRating = 5
var offImage: Image?
var onImage = Image(systemName: "star.fill")
var offColor = Color.gray
var onColor = Color.yellow
var body: some View {
HStack{
if label.isEmpty == false {
Text(label)
}
ForEach(1..<maximumRating + 1) { number in
self.image(for: number)
///ERROR 1
.foregroundColor(number > self.rating ? self.offColor : self.onColor)
.onTapGesture {
self.rating = number
print("Tap gesture!")
}
}
}
}
func image(for number: Int) -> Image {
///ERROR 2
if number > rating {
return offImage ?? onImage
} else {
return onImage
}
}
}
我收到以下错误消息:
Operator function '>' requires that 'UserRating' conform to
'BinaryInteger'
这不起作用...
1. 说我的等级是 Int
2. 在我的 class
中初始化评分
class UserRating : ObservableObject {
@Published private var rating : Int = 4
}
class UserRating : ObservableObject {
@Published private var rating = 4
init(rating: Int) {
self.rating = rating
}
}
感谢您的帮助!
您正在引用拥有 对象 而不是基于 Int
的 属性。尝试:
.foregroundColor(number > self.rating.rating ? self.offColor : self.onColor)
和:
if number > rating.rating {
// do your work
}
此外,考虑将环境对象的名称更改为 userRating
,以免混淆。
if number > userRating.rating { }
首先 - 这些是我使用 ObservableObjects 的第一步,也许它只是一个小错误......
我尝试创建一个带有星星的评级栏(使用 paul hudson 教程)但是有一个变量将在 2 个以上的视图中使用,所以我需要一个 ObservableObject。
评级在 Rating.swift 中创建,将在 FeedbackView.swift 中调用,FeedbackView.swift 将由 TabBar 从 EKLComplete.swift 中调用。
我用 @Binding var 尝试了 "Paul Hudson Way",但我的代码与 Pauls 教程中的代码不一样。我的观点都希望有变量,这是正确的 - 因为绑定。 据我了解,@Binding 允许我与 2 个视图共享变量,在我的例子中,我的 EKLComplete 视图也想知道该值,所以它必须是一个 ObservableObject,对吗?
创建 class 后:
class UserRating : ObservableObject {
@Published private var rating = 4
}
并在 3 个视图中使用以下代码实例化变量
@EnvironmentObject var rating : UserRating
这是我的代码,它会引发错误。
struct Rating: View {
@EnvironmentObject var rating : UserRating
var label = ""
var maximumRating = 5
var offImage: Image?
var onImage = Image(systemName: "star.fill")
var offColor = Color.gray
var onColor = Color.yellow
var body: some View {
HStack{
if label.isEmpty == false {
Text(label)
}
ForEach(1..<maximumRating + 1) { number in
self.image(for: number)
///ERROR 1
.foregroundColor(number > self.rating ? self.offColor : self.onColor)
.onTapGesture {
self.rating = number
print("Tap gesture!")
}
}
}
}
func image(for number: Int) -> Image {
///ERROR 2
if number > rating {
return offImage ?? onImage
} else {
return onImage
}
}
}
我收到以下错误消息:
Operator function '>' requires that 'UserRating' conform to 'BinaryInteger'
这不起作用... 1. 说我的等级是 Int 2. 在我的 class
中初始化评分class UserRating : ObservableObject {
@Published private var rating : Int = 4
}
class UserRating : ObservableObject {
@Published private var rating = 4
init(rating: Int) {
self.rating = rating
}
}
感谢您的帮助!
您正在引用拥有 对象 而不是基于 Int
的 属性。尝试:
.foregroundColor(number > self.rating.rating ? self.offColor : self.onColor)
和:
if number > rating.rating {
// do your work
}
此外,考虑将环境对象的名称更改为 userRating
,以免混淆。
if number > userRating.rating { }