环境中的字符串变量是只获取的。 Swift
String variable in Environment is a get only. Swift
我可以在我的环境中获取一个变量,但我不能set/update该变量。
我的环境对象如下所示:
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 中的变量?如果是这样,有没有办法设置自定义获取和设置?
要同时拥有自定义 getter 和设置器,您只需要第二个 属性。
var _stringFormat: String?
stringFormat: String {
get {
_stringFormat ?? element + " (" + timeFrame + ")"
}
set {
_stringFormat = newValue
}
}
这是一条路要走
var stringFormat: String {
get {
firstElement.stringFormat + " " + comparand + secondElement.stringFormat
}
set {
// parse incoming newValue String to store back into
// firstElement, comparand, and secondElement
}
}
我可以在我的环境中获取一个变量,但我不能set/update该变量。
我的环境对象如下所示:
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 中的变量?如果是这样,有没有办法设置自定义获取和设置?
要同时拥有自定义 getter 和设置器,您只需要第二个 属性。
var _stringFormat: String?
stringFormat: String {
get {
_stringFormat ?? element + " (" + timeFrame + ")"
}
set {
_stringFormat = newValue
}
}
这是一条路要走
var stringFormat: String {
get {
firstElement.stringFormat + " " + comparand + secondElement.stringFormat
}
set {
// parse incoming newValue String to store back into
// firstElement, comparand, and secondElement
}
}