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