2017-07-17 74 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

相關問題