1

我可以在我的环境中获取一个变量,但我无法设置/更新该变量。

我的环境对象如下所示:

import SwiftUI
import Combine

class UserData: ObservableObject{
    @Published var examples = exampleData
}

我有一个读取 JSON 的加载函数:

let exampleData: [Example] = load("exampleData.json")

这是什么示例格式为:

import SwiftUI
import CoreLocation

struct Example: Hashable, Codable, Identifiable {
    var id: Int
    var name: String
    var exampleCondition: [SubCondition]
}

struct SubCondition: Hashable, Codable, Identifiable {
    var id: Int
    var comparand: String
    var firstElement: ExampleElement
    var secondElement: ExampleElement
    
    var stringFormat: String {
        firstElement.stringFormat + " " + comparand + secondElement.stringFormat     
    }
}

struct ExampleElement: Hashable, Codable {
    var timeFrame: String
    var element: String
    
    var stringFormat: String {
        element + " (" + timeFrame + ")"
    }
}

在我的观点中使用@EnvironmentObject var userData: UserData,我可以显示如下内容:Text(userData.examples[examplesIndex].exampleCondition[0].stringFormat)

但是,我得到一个Cannot assign to property: 'stringFormat' is a get-only property. 当我做:

var tempString: String = "abc"

Rectangle().onTapGesture {
   userData.examples[examplesIndex].exampleCondition[0].stringFormat = tempString
}

我如何在我的@EnvironmentObject var userData?

是因为我正在计算 stringFormat 并且设置 stringFormat 的最佳方法是编辑用于计算 stringFormat 的 ExampleElement 中的变量吗?如果是这样,有没有办法设置自定义获取和设置?

4

2 回答 2

0

要同时拥有自定义 getter 和 setter,您只需要第二个属性。

var _stringFormat: String?

stringFormat: String {
    get { 
        _stringFormat ?? element + " (" + timeFrame + ")"
    }
    set {
        _stringFormat = newValue
    }
}
于 2020-09-04T23:08:55.060 回答
0

这是一条路

var stringFormat: String {
    get {
        firstElement.stringFormat + " " + comparand + secondElement.stringFormat
    }
    set {
        // parse incoming newValue String to store back into
        // firstElement, comparand, and secondElement
    }
}
于 2020-09-05T03:59:54.093 回答