swift - 如何在类外使用变量
问题描述
我想在 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
解决方案
如果您希望能够在类之外使用这些变量,则必须将它们声明为全局变量。只需在类范围之外声明它们就可以了。
或者,您可以创建一个结构并定义可以在任何地方使用的静态变量。上述使事情更具可读性和可保留性。
推荐阅读
- c++ - CUDA C++ - 如何在 cuda 内核中定义一个未知大小的数组(没有 __shared__ )?
- mysql - Power Automate - 与 MySQL 的云连接
- python - 为什么 ruamel.yaml 会自动添加锚点和别名?
- android - Java Android - 背景剪贴板服务
- scala - Scala 工作表扩展方法错误:未找到值扩展
- firebase - 在 android 设备和模拟器中运行,但 iPhone 模拟器出现问题
- javascript - 是否可以在 Java 的内置类中注入方法?
- python - 在 Pydantic 中动态创建嵌套模型
- java - Java Socket 不使用来自 JAVA_TOOL_OPTIONS 的代理
- aws-lambda - Lambda 函数启动,未执行,达到超时