Balbas Code

SwiftUIでリストに格納した位置情報を表示する

公開日: 2024-02-06 01:10:54
更新日: 2024-02-06 01:15:23

タップするたびに配列に格納した位置情報を取得するコード


ボタンを押すたびに、配列に格納した位置情報をずらしながら表示するコード。
testViewModel.getLocationData()の部分をタイマー関数で囲うと、毎秒位置情報を送信するコードを実現できる。

ContentView:画面描画


import SwiftUI
import CoreLocation

struct ContentView: View {
@State private var latitudeText: String = "緯度経度情報がここに表示されます"
@State private var longitudeText: String = ""
let testViewModel = TestViewModel()

var body: some View {
VStack {

Text(latitudeText)
.padding()
Text(longitudeText)
.padding()

Button(action: {
// ボタンがタップされた時のアクション
if let location = testViewModel.getLocationData() {
self.latitudeText = "緯度: \(location.coordinate.latitude)"
self.longitudeText = "経度: \(location.coordinate.longitude)"
}
}) {
Text("Tap me!")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
}
}
}


 


TestViewModel:Viewから呼ばれる


import Foundation
import CoreLocation

/// ViewModel
class TestViewModel {
let locationModel = LocationModel()

func getLocationData() -> CLLocation? {
return locationModel.getTestLocation()
}
}


TestLocationModel:位置情報データ格納用モデル


import Foundation

/// TestLocationModel
class TestLocation {

// 配列 ここに対象テストデータをこの形式で貼り付ける
let testLocation: [(Double, Double)] = [
(35.1876684720224,137.176425305838),
(35.1876684720324,137.176425306838),
(35.1876684720424,137.176425307838),
(35.1876684720524,137.176425308838),
(35.1876684720624,137.176425309838)
]

// 次の位置情報を取得する関数
func getNextLocation(locationModel: LocationModel) -> (latitude: Double, longitude: Double)? {
if locationModel.arrayCount < testLocation.count {
let location = testLocation[locationModel.arrayCount]
locationModel.arrayCount += 1
return (latitude: location.0, longitude: location.1)
} else {
return nil
}
}
}

 


LocationModel:TestLocationModelから位置情報を呼び出し、ViewModelへ渡す


import Foundation
import CoreLocation

/// LocationModel
class LocationModel {

var arrayCount: Int = 0

let testModel = TestLocation()

func getTestLocation() -> CLLocation? {
let testModel = TestLocation()

// TestLocation から緯度経度を取得
let customLocation = testModel.getNextLocation(locationModel: self)

// 緯度経度から CLLocation オブジェクトを作成
let currentLocation = CLLocation(latitude: customLocation!.latitude, longitude: customLocation!.longitude)
print("\(Date())\n latitude: \(currentLocation.coordinate.latitude)\n longitude: \(currentLocation.coordinate.longitude)")

return currentLocation
}
}

 


locationData