变量未更新-func使用默认变量

问题描述

在我的ThirdScreenViewController中,用number更改变量IBAction pressed

import Foundation
import UIKit

class ThirdScreenViewController: UIViewController {

        override func viewDidLoad() {
            super.viewDidLoad()

        }
     var weatherManager = WeatherManager()
    var team = "leer"
    static var number = 1
    
    @IBAction func bayernMunchen(_ sender: UIButton) {
        team = "bayernMunchen"
    }
    @IBAction func borussiaDortmund(_ sender: UIButton) {
        team = "borussiaDortmund"
    }
    @IBAction func schalke(_ sender: UIButton) {
        team = "schalke"
    }
    @IBAction func pressed(_ sender: UIButton) {
        switch team {
        case "bayernMunchen":
        ThirdScreenViewController.number = 46
        case "borussiaDortmund":
        ThirdScreenViewController.number = 41
        case "schalke":
        ThirdScreenViewController.number = 45
        default: print(8)
        }
        let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle:nil)
        let nextViewController = storyBoard.instantiateViewController(withIdentifier: "WeatherViewController") as! WeatherViewController
        self.present(nextViewController,animated:true,completion:nil)

    }
} 

在另一个快速文件(不是View Controller)中,我有一个函数可以使用number并对其进行处理。

import Foundation
import UIKit

var TeamOne = ""
var TeamTwo = ""
var scoreOne = ""
var scoreTwo = ""

var TeamThree = ""
var TeamFour = ""
var scoreThree = ""
var scoreFour = ""
var cityName = ThirdScreenViewController.number

struct WeatherManager {
    
    
    let weatherURL = "https://livescore-api.com/api-client/teams/matches.json?number=10&team_id=19&key=d33FTnnd6qwvEmjz&secret=BbO3REPYFXvb7fpkit0cQnpXNWssiL1U&number=3&team_id=\(cityName)"
    
    func fetchWeather () {
        let urlString = "\(weatherURL)"
        perfromrequest(urlString: urlString)
        
    }
    
    func perfromrequest(urlString: String)
    {
        //1.Url erstellen
        if let url = URL(string: urlString) {
            //2. URLSession starten
            let session = URLSession(configuration: .default)
            //3. Give session a task
            let task =  session.dataTask(with: url) { (gettingInfo,response,error) in
                if error != nil{
                    print(error!)
                    return
                }
                
                if let safeFile = gettingInfo {
                    self.parseJSON(weatherFile: safeFile)
                }
            }
            //4. Start the task
            task.resume()
            
        }
    }
    
    //Das Ergebnis von oben wird hier ausgegeben
    func parseJSON(weatherFile: Data) {
        let decoder = JSONDecoder()
        do{
            let decodedFile =  try decoder.decode(WeatherFile.self,from: weatherFile)
            TeamOne = decodedFile.data[0].home_name
            scoreOne = decodedFile.data[0].score
            
            TeamTwo = decodedFile.data[0].away_name
            scoreTwo = decodedFile.data[0].score
            
            TeamThree = decodedFile.data[1].home_name
            scoreThree = decodedFile.data[1].score
            
            TeamFour = decodedFile.data[1].away_name
            scoreFour = decodedFile.data[1].score
          
            
        } catch {
            print(error)
        }
    }
   
}

在第三个swift文件中,我使用此功能weatherManager.fetchWeather()调用第二个swift文件中发生的情况。 但这是问题所在。它使用具有认值1而不是值41/46/45的变量number。我在做什么错了?

解决方法

基本上,任何类之外的全局变量和共享数据的静态变量都是错误的做法。

除此之外,要获取团队ID,请动态删除该行

var cityName = ThirdScreenViewController.number

在结构替换中

let weatherURL = "https://livescore-api.com/api-client/teams/matches.json?number=10&team_id=19&key=d33FTnnd6qwvEmjz&secret=BbO3REPYFXvb7fpkit0cQnpXNWssiL1U&number=3&team_id=\(cityName)"

使用

let weatherURL = "https://livescore-api.com/api-client/teams/matches.json?number=10&team_id=19&key=d33FTnnd6qwvEmjz&secret=BbO3REPYFXvb7fpkit0cQnpXNWssiL1U&number=3&team_id="

let urlString = "\(weatherURL)"

使用

let urlString = weatherURL + String(ThirdScreenViewController.number)

注意:考虑将与天气相关的内容重命名为与 team 相关的内容