![](/img/trans.png)
[英]Google Maps iOS SDK to user's current location on launch Swift SwiftUI
[英]How can I call an API with user's current location on app launch in SwiftUI?
我正在嘗試使用用戶當前位置在應用啟動時調用 API。 我目前的代碼是:
在ContentView.swift 中:
struct ContentView: View {
@StateObject var locationManager = LocationManager()
var userLocation: String {
let latitude = "\(locationManager.lastLocation?.coordinate.latitude ?? 0)"
let longitude = "\(locationManager.lastLocation?.coordinate.longitude ?? 0)"
return "\(latitude),\(longitude)"
}
@ObservedObject var api = randomAPI(location: userLocation)
var body: some View {
...
在randomAPI.swift 中:
class randomAPI: ObservableObject {
init(location: String) {
callAPI(userLocation: location)
}
func callAPI(userLocation: String) {
...
我得到了錯誤:
不能在屬性初始化器中使用實例成員“userLocation”; 屬性初始化程序在 'self' 可用之前運行。
我不知道我應該把下面的行放在哪里來初始化randomAPI。 (實際上我什至不知道這是否是初始化它的正確方法哈哈)
@ObservedObject var api = randomAPI(location: userLocation)
有人可以幫我解決這個問題嗎? 謝謝!
正如Joakim提到的,您需要使用.onAppear
。 這是因為在結構中設置屬性之前,您無法訪問該屬性。
對於您的情況,代碼如下所示:
struct ContentView: View {
@StateObject var locationManager = LocationManager()
var userLocation: String {
let latitude = "\(locationManager.lastLocation?.coordinate.latitude ?? 0)"
let longitude = "\(locationManager.lastLocation?.coordinate.longitude ?? 0)"
return "\(latitude),\(longitude)"
}
@ObservedObject var api: randomAPI?
var body: some View {
SomeView()
.onAppear {
api = randomAPI(location: userLocation)
}
...
但是,我不認為在視圖出現后立即設置ObservedObject
是最好的方法。
如果我是你,我會刪除rapidAPI
class 中的 init 方法:
class randomAPI: ObservableObject {
func callAPI(userLocation: String) {
...
並在視圖出現時調用callAPI
方法:
struct ContentView: View {
@StateObject var locationManager = LocationManager()
var userLocation: String {
let latitude = "\(locationManager.lastLocation?.coordinate.latitude ?? 0)"
let longitude = "\(locationManager.lastLocation?.coordinate.longitude ?? 0)"
return "\(latitude),\(longitude)"
}
@ObservedObject var api = randomAPI()
var body: some View {
SomeView()
.onAppear {
api.callAPI(location: userLocation)
}
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.