2017-07-17 4 views
0

私は基本的な何かが欠けする必要がありますが、私は私の配列がロードされ続けるように見えることはできません。正常に読み込まれますが、別の関数に表示されると空になります。なぜ私の配列は読み込まれた後に空になりますか?

私の目標は、ランダムに場所配列から都市を選択することです。マップビューにはすべての注釈が読み込まれますが、注釈が表示された後にpickRandomNumber()を呼び出すと、位置配列が空になります。

はここで、

イーライ

をいただきありがとうございます私のコードです:

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

関連する問題