2017-07-17 38 views
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 
} 

回答

2
func loadArray() { 
var locations = [ 

你正在创建一个局部变量locations,而不是将数据设置为类变量。总之:放下var

+0

谢谢......我需要新的眼镜。 – user3140521

相关问题