【问题标题】:Operator function '>' requires that 'UserRating' conform to 'BinaryInteger' - SwiftUI ObservableObject运算符函数'>'要求'UserRating'符合'BinaryInteger' - SwiftUI ObservableObject
【发布时间】:2020-04-02 08:53:07
【问题描述】:

首先 - 这些是我使用 ObservableObjects 的第一步,也许它只是一个小错误......

我尝试创建一个带有星星的评分栏(使用 paul hudson 教程),但有一个变量将用于超过 2 个视图,所以我需要一个 ObservableObject。

Rating 在 Rating.swift 中创建,将在 FeedbackView.swift 中调用,FeedbackView.swift 将由 EKLComplete.swift 中的 TabBar 调用。

我尝试了使用 @Binding var 的“Paul Hudson Way”,但我的代码与 Pauls 教程中的工作方式不同。我的观点都希望有变量,这是正确的 - 因为绑定。 据我了解,@Binding 允许我与 2 个视图共享变量,在我的情况下,我的 EKLComplete 视图也想知道该值,所以它必须是一个 ObservableObject,对吧?

创建类后:

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

我收到以下错误消息:

运算符函数'>'要求'UserRating'符合 '二进制整数'

这行不通... 1. 说我的评分是 Int 2.在我的班级初始化评分

class UserRating : ObservableObject {
@Published private var rating : Int = 4
}
class UserRating : ObservableObject {
    @Published private var rating = 4
    init(rating: Int) {
        self.rating = rating
    }
 }

感谢您的帮助!

【问题讨论】:

    标签: swift observableobject


    【解决方案1】:

    您引用的是拥有的对象,而不是基于Int 的属性。试试:

    .foregroundColor(number > self.rating.rating ? self.offColor : self.onColor)
    

    和:

    if number > rating.rating {
        // do your work
    }
    

    另外,请考虑将环境对象的名称更改为 userRating,以免混淆。

    if number > userRating.rating { }
    

    【讨论】:

    • 谢谢!这会打开灯:-) - 顺便说一句,好名字:D
    猜你喜欢
    • 2021-11-24
    • 2022-01-12
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2021-02-10
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多