首页 > 解决方案 > 如何在类外使用变量

问题描述

我想在 ViewController 类之外使用变量(depAirportLat 和 depAirportLong)来在地图上显示坐标,但它不起作用,你能帮帮我吗?这是我的程序:

import UIKit
import MapKit


class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var resultWeather: UIImageView!
    @IBOutlet weak var arrairport: UITextField!
    @IBOutlet weak var depairport: UITextField!
    @IBOutlet weak var resultAirport: UILabel!
    @IBOutlet weak var fontAirports: UIImageView!
    @IBOutlet weak var resultTemp: UILabel!
    @IBOutlet weak var resultTempfar: UILabel!
    @IBOutlet weak var resultHum: UILabel!
    @IBOutlet weak var resultCeiling: UILabel!
    @IBOutlet weak var resultClouds: UILabel!
    @IBOutlet weak var resultWind: UILabel!
    @IBOutlet weak var resultPressure: UILabel!
    @IBOutlet weak var resultMetar: UILabel!
    @IBOutlet weak var resultTaf: UILabel!
    @IBOutlet weak var arrMap: MKMapView!
    @IBOutlet weak var depMap: MKMapView!
    @IBAction func getWeather(_ sender: UIButton) {

        sender.pulsate()


        if let url = URL(string: "http://fr.allmetsat.com/metar-taf/france.php?icao=" + depairport.text!.replacingOccurrences(of: " ", with: "-"))
        { let request = NSMutableURLRequest(url: url)
            let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
                var message = ""
                if error != nil { print(error!) } else { if let unwrappedData = data {


                    let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue); var stringSeparator = "METAR:</b> "
                    if let contentArray = dataString?.components(separatedBy: stringSeparator) {
                        if contentArray.count > 1 { stringSeparator = "</p></div><div class=\"c1\""
                            let newContentArray = contentArray[1].components(separatedBy: stringSeparator); if newContentArray.count > 1 { message = newContentArray[0]
                                print(message)

                                if (dataString?.contains("CAVOK"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "sun.png") }}
                                else if (dataString?.contains("SKC"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "sun.png")}
                                }
                                else if (dataString?.contains("SCT"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "scattered.png")} }
                                else if (dataString?.contains("OVC"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "overcast.png")} }
                                else if (dataString?.contains("BKN"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "broken.png")} }
                                else if (dataString?.contains("FEW"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "few.png")} }
                                else if (dataString?.contains("NSC"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "sun.png")} }
                                else if (dataString?.contains("RAIN"))!{
                                    DispatchQueue.main.async { self.resultWeather.image = UIImage(named: "rain.png")}
                                }}}}}}

            }

            task.resume();


            if let url = URL(string: "http://fr.allmetsat.com/metar-taf/france.php?icao=" + self.depairport.text!.replacingOccurrences(of: " ", with: "-"))
            { let requesta = NSMutableURLRequest(url: url)
                let taska = URLSession.shared.dataTask(with: requesta as URLRequest) { data, response, error in
                    var messagea = ""
                    if error != nil { print(error!) } else { if let unwrappedData = data {
                        let dataStringa = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue); var stringSeparatora = "<div class=\"c1b\""

                        if let contentArray = dataStringa?.components(separatedBy: stringSeparatora) { if contentArray.count > 1 { stringSeparatora = "</h1><p>"
                            let newContentArray = contentArray[1].components(separatedBy: stringSeparatora); if newContentArray.count > 1 { messagea = newContentArray[0]
                                print(messagea) }}}};
                    }
                    if messagea == "" { messagea = "No data..." }
                    DispatchQueue.main.sync(execute: { self.resultAirport.text = self.depairport.text! })}; taska.resume() } else { self.resultAirport.text = "0" };

 //latitude variable (depAirportLat)

            if let urlcoord = URL(string:"https://flyawaysimulation.com/airports/" + self.depairport.text!.replacingOccurrences(of: " ", with: "-"))
            { let requestad = NSMutableURLRequest(url: urlcoord)
                let taskad = URLSession.shared.dataTask(with: requestad as URLRequest) { data, response, error in

                    var depAirportLat = ""

                    if error != nil { print(error!) } else { if let unwrappedData = data {
                        let dataStringad = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue); var stringSeparatorad = "<dt>Latitude</dt>"

                        if let contentArray = dataStringad?.components(separatedBy: stringSeparatorad) { if contentArray.count > 1 { stringSeparatorad = "</dd>"
                            let newContentArray = contentArray[1].components(separatedBy: stringSeparatorad); if newContentArray.count > 1 { depAirportLat = newContentArray[0]


                                print(depAirportLat) }}}}}};

                    taskad.resume()


            }
   }



override func viewDidLoad() {
        super.viewDidLoad()


//Do any additional setup after loading the view, typically from a nib.

 class gloVarDep {

 var depAirportLatReal = depAirportLat.dropFirst(5)
 var depAirportLatRealCoord = String(depAirportLatReal)
 var depAirportLatRealCoordFloat = (depAirportLatRealCoord as NSString).floatValue

标签: swiftxcode

解决方案


如果您希望能够在类之外使用这些变量,则必须将它们声明为全局变量。只需在类范围之外声明它们就可以了。

或者,您可以创建一个结构并定义可以在任何地方使用的静态变量。上述使事情更具可读性和可保留性。


推荐阅读