Swift SwfitUI创建一个类似@published变量的函数
我有一个类,它有两个已发布的变量:Swift SwfitUI创建一个类似@published变量的函数,swift,swiftui,Swift,Swiftui,我有一个类,它有两个已发布的变量: class Controller: ObservableObject { @Published var myArray: Array<Int>: [1,2,3,4,5] @Published var currIndex: Int = 0 func currItem() -> Int { return myArray[curIndex] } } 类控制器:可观察对象{ @已发布的变量myAr
class Controller: ObservableObject {
@Published var myArray: Array<Int>: [1,2,3,4,5]
@Published var currIndex: Int = 0
func currItem() -> Int {
return myArray[curIndex]
}
}
类控制器:可观察对象{
@已发布的变量myArray:数组:[1,2,3,4,5]
@已发布变量索引:Int=0
func currItem()->Int{
返回myArray[curIndex]
}
}
我希望视图订阅函数“currItem”,而不是currIndex变量
有没有一种优雅的方式来实现它?
在不订阅函数的情况下,我需要编写一些样板代码:
struct myView: View {
var controller: Controller = Controller()
var body: some View {
Text(controller.myArray[controller.currIndex]) // <-- Replace this with controller.currItem()
}
}
struct myView:View{
变量控制器:控制器=控制器()
var body:一些观点{
Text(controller.myArray[controller.currendex])/您甚至可以做得更好,如下所示:
类控制器:可观察对象{
@已发布的var myArray:Array=[1,2,3,4,5]
@已发布变量索引:Int?=0
项目:Int{
得到{
如果让展开索引:Int=currendex{
如果myArray.index.contains(展开索引){
返回myArray[展开索引]
}
否则{
打印(“错误!找不到这样的索引!”)
归零
}
}
否则{
打印(“错误!您没有为currIndex提供值!”)
归零
}
}
}
}
我喜欢这个答案。我有一个问题,为什么控制器变量使用“State”而不是“StateObject”?对不起,凯文,这是我输入的问题,应该是StateObject,谢谢
import SwiftUI
struct ContentView: View {
@StateObject var controller: Controller = Controller()
var body: some View {
Text(controller.currItem?.description ?? "Error!")
}
}
class Controller: ObservableObject {
@Published var myArray: Array<Int> = [1,2,3,4,5]
@Published var currIndex: Int? = 0
var currItem: Int? {
get {
if let unwrappedIndex: Int = currIndex {
if myArray.indices.contains(unwrappedIndex) {
return myArray[unwrappedIndex]
}
else {
print("Error! there is no such index found!")
return nil
}
}
else {
print("Error! you did not provide a value for currIndex!")
return nil
}
}
}
}