Ios 快速写入和访问类对象
因此,我尝试使用MapKit将一系列点放入地图中。最后,我将从csv获取一个数据点列表,并将它们加载到Location类中,然后将它们作为MapView注释从类中读取。这在这里单独用于手动绘制2个点…但我不知道如何正确加载和访问许多项的Location类(例如10个Location points) 这是我的班级档案Ios 快速写入和访问类对象,ios,class,swift3,Ios,Class,Swift3,因此,我尝试使用MapKit将一系列点放入地图中。最后,我将从csv获取一个数据点列表,并将它们加载到Location类中,然后将它们作为MapView注释从类中读取。这在这里单独用于手动绘制2个点…但我不知道如何正确加载和访问许多项的Location类(例如10个Location points) 这是我的班级档案 import Foundation import MapKit class Location: NSObject, MKAnnotation{ let title: Str
import Foundation
import MapKit
class Location: NSObject, MKAnnotation{
let title: String?
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, locationName: String, lat: String, lon: String){
self.title = title
self.locationName = locationName
let latDouble = (lat as NSString).doubleValue
let lonDouble = (lon as NSString).doubleValue
let latlong = CLLocationCoordinate2D(latitude: latDouble, longitude: lonDouble)
self.discipline = locationName
self.coordinate = latlong
super.init()
}
}
这里是ViewController.swift
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate {
//var stops = TransitStop[]()
let initialLocation = CLLocation( latitude: 41.880632, longitude: -87.623277)
@IBOutlet weak var mapView: MKMapView!
let regionRadius: CLLocationDistance = 1000
override func viewDidLoad() {
super.viewDidLoad()
let initial = Location(title: "YOU", locationName: "are here", lat: "41.880632", lon: "-87.623277")
let firstStop = Location(title: "ashland", locationName: "ashland", lat: "41.88574", lon: "-87.627835")// Do any additional setup after loading the view, typically from a nib.
centerMapOnLocation(location: initialLocation)
mapView.addAnnotation(initial)
mapView.addAnnotation(firstStop)
}
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius * 2.0, regionRadius * 2.0)
mapView.setRegion(coordinateRegion, animated: true)
}
}
试着这样做:
var locationArray: [Location] = []
for line in csvString{
let values:[String] = line.components(separatedBy: ",")
let title = values[0]
let locationName = values[1]
let lat = values[2]
let lng = values[3]
let latD: Double = Double(lat)
let lngD: Double = Double(lng)
let location = Location(title: title, locationName: locationName, lat: latD, lng: lngD)
locationArray.append(location)
}
centerMapOnLocation(location: initialLocation)
addLocationsToMap(locationArray: locationArray)
在实现之前,请确保对值(Double
)进行一些验证。
然后,您可以使用此功能将位置读入地图:
func addLocationsToMap(locationArray: [Location]){
for location in locationArray {
mapView.addAnnotation(location)
}
}
注意:我意识到OP不需要显式定义变量。我只是觉得这样更容易理解
我假设csv值可能可以从数组中读取,并且csv文件中“title”、“loacationName”的值的位置定义良好。我假设您将从csv中获得所有必要的信息,包括lat、long和位置的标题
将所有项目从csv获取到一个模型对象数组,只需循环通过元素,从数组值初始化您的
位置
对象,并将其添加为注释。从概念上讲,我理解这就是我想要做的。但是我想我没有正确的语法来做这件事。你能提供一个基于这段代码的例子吗?好的,我接受这个答案,这部分通过了,好的,但是这些点没有添加到地图上。我认为我的类文件或我如何格式化或访问它存在一些问题。请检查CSV文件的格式,确保您的数据(标题、位置、lat、lng)在预期的位置,并将值[x]指定给相应的变量。我现在看到您在Location
类中执行到Double
的转换,因此您不需要在我显示的地方执行转换。确保未切换lat和lng值。如果你需要任何进一步的帮助,请告诉我。你可以发布一个csv文件的例子,我们可以从那里开始。