加载视图时SwiftUI图像不更新其URL
我有一个类UserLocation的全局对象,它在加载视图时SwiftUI图像不更新其URL,swift,swiftui,core-location,appdelegate,combine,Swift,Swiftui,Core Location,Appdelegate,Combine,我有一个类UserLocation的全局对象,它在AppDelegate.swift中初始化。我正在获取用户的当前位置,并根据用户的当前位置更改SwiftUI视图中的图像。 下面是UserLocation类: class UserLocation: ObservableObject { var userCurrentState: StateEnum = .None // StateEnum is an enum to store state areas like west, eas
AppDelegate.swift
中初始化。我正在获取用户的当前位置,并根据用户的当前位置更改SwiftUI视图中的图像。
下面是UserLocation
类:
class UserLocation: ObservableObject {
var userCurrentState: StateEnum = .None
// StateEnum is an enum to store state areas like west, east and its default value is .None
}
在我的CoreLocation
方法中,经过一些计算后,我正在设置全局userLocation
对象的userCurrentState
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
* some calculations *
userLocation.userCurrentState = .West
}
StateEnum
有一个方法getStateImage
,它返回一个字符串
,该字符串是我应用程序的xcassets
中图像的名称,下面是我在SwiftUI视图中使用它的方式:
import SwiftUI
import Combine
struct ContentView: View {
@EnvironmentObject var locationOfUser: UserLocation
var body: some View {
HStack {
Image(locationOfUser.userCurrentState.getStateImage)
.resizable()
.frame(width: 30, height: 30, alignment: .leading)
}
}
.
.
.
.
.
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(userLocation)
}
}
问题是,当我启动应用程序时,“无”状态下的图像会显示出来,并且不会改变。我正在根据当前位置更改图像,一旦用户进入一个新区域,并且用户的状态发生更改,图像就会更改,但我没有获得预期的行为。但是,如果在初始化视图之前设置了2毫秒的间隔,则图像会根据当前位置不断变化。当我启动应用程序并根据None枚举获取图像时,它不会改变。我观察到的是视图初始化和获取当前位置之间的微秒差异。这可以通过
定时器解决,但我不想使用定时器或任何其他黑客行为。您是否用@Published
属性包装器标记用户当前状态
?我看不出来。为了能够在每次属性更改时获取最新值,您需要一个发布者。这就是简单的@发布的
属性包装的目的。如果您在主线程上收到更新,它仍然不起作用。如果没有,请更新我在主线程上收到的主线程中的值。您是如何实现和初始化CLLocationManagerDelegate
一致性对象的?