Ios 快速写入和访问类对象

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

因此,我尝试使用MapKit将一系列点放入地图中。最后,我将从csv获取一个数据点列表,并将它们加载到Location类中,然后将它们作为MapView注释从类中读取。这在这里单独用于手动绘制2个点…但我不知道如何正确加载和访问许多项的Location类(例如10个Location points)

这是我的班级档案

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文件的例子,我们可以从那里开始。