Environment中的字符串变量仅为get.斯威夫特



我可以在环境中获取变量,但不能设置/更新该变量。

我的环境对象如下所示:

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中设置某些内容?

是因为我在计算字符串格式,而设置字符串格式的最佳方法是编辑ExampleElement中用于计算字符串格式的变量吗?如果是,有没有办法设置自定义的获取和设置?

以下是

var stringFormat: String {
get {
firstElement.stringFormat + " " + comparand + secondElement.stringFormat
}
set {
// parse incoming newValue String to store back into
// firstElement, comparand, and secondElement
}
}
要同时拥有自定义getter和setter,只需要第二个属性。
var _stringFormat: String?
stringFormat: String {
get { 
_stringFormat ?? element + " (" + timeFrame + ")"
}
set {
_stringFormat = newValue
}
}

最新更新