0
我必須缺少一些基本的,但我似乎無法保持我的數組加載。它成功加載,但當它出現在另一個函數中時變爲空。爲什麼我的數組在加載後清空了?
我的目標是從locations數組中隨機選擇一個城市。 mapview加載了所有的註解,但是當我在註解出現後調用pickRandomNumber()時,我的locations數組清空了。
謝謝
禮
這裏是我的代碼:
import UIKit
import Mapbox
import GameplayKit
class ViewController: UIViewController, MGLMapViewDelegate {
var playerAnswer = ""
var number = Int()
var locations:[(number: Int, title: String, latitude:Double, Longitude:Double)] = []
var question = ""
var theCount = Int()
var randomNumber = Int()
var mapView = MGLMapView()
override func viewDidLoad() {
super.viewDidLoad()
mapView = MGLMapView(frame: view.bounds)
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
// Set the map’s center coordinate and zoom level.
mapView.setCenter(CLLocationCoordinate2D(latitude: 40.7326808, longitude: -73.9843407), zoomLevel: 1, animated: true)
view.addSubview(mapView)
mapView.allowsZooming = true
let center = CLLocationCoordinate2D(latitude: 38.894368, longitude: -77.036487)
mapView.setCenter(center, zoomLevel: 7, animated: true)
// Set the delegate property of our map view to `self` after instantiating it.
mapView.delegate = self as! MGLMapViewDelegate
loadArray()
}
func loadArray() {
var locations = [
[number:0, "title": "Washington DC, USA", "latitude": 38.90, "longitude": -77.04],
[number:1,"title": "Ottawa, Canada", "latitude": 45.41, "longitude": -75.70],
[number:2,"title": "Mexico City, Mexico", "latitude": 19.43, "longitude": -99.13],
[number:3,"title": "Tegucigalpa, Honduras", "latitude": 14.08, "longitude": -87.21],
[number:4,"title": "San Salvador, El Salvador", "latitude": 13.69, "longitude": -89.19],
[number:5,"title": "Managua, Nicaragua", "latitude": 12.13, "longitude": -86.25],
[number:6,"title": "Belmopan, Belize", "latitude": 14.64, "longitude": -90.51],
[number:7,"title": "Panama City, Panama", "latitude": 8.99, "longitude": -79.52],
[number:8,"title": "Havana, Cuba", "latitude": 23.13, "longitude": -82.38],
[number:9,"title": "Caracas, Venezuela", "latitude": 10.49, "longitude": -66.88],
[number:10,"title": "Bogotá, Colombia", "latitude": 4.61, "longitude": -74.08],
[number:11,"title": "Lima, Peru", "latitude": -12.04, "longitude": -77.03]
]
for location in locations {
let annotation = MGLPointAnnotation()
annotation.title = location["title"] as? String
annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"] as! Double, longitude: location["longitude"] as! Double)
mapView.addAnnotation(annotation)
}
print ("Current count for locations is \(locations.count)") // count is 12
}
func pickRandomNumber() {
print ("The array count is \(locations.count)") // count is 0
randomNumber = GKARC4RandomSource().nextInt(upperBound: locations.count)
print (randomNumber) // randomNumber is always 0
}
// Use the default marker. See also: our view annotation or custom marker examples.
func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
return nil
}
// Allow callout view to appear when an annotation is tapped.
func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
playerAnswer = annotation.title as! String
print ("The player pressed \(playerAnswer)")
pickRandomNumber()
return true
}
謝謝......我需要新的眼鏡。 – user3140521