Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';t获取UIButton调用Swift 4中的代码块_Ios_Swift_Xcode_Button_Uibutton - Fatal编程技术网

Ios Can';t获取UIButton调用Swift 4中的代码块

Ios Can';t获取UIButton调用Swift 4中的代码块,ios,swift,xcode,button,uibutton,Ios,Swift,Xcode,Button,Uibutton,我试图调用一大块代码,以便在单击按钮(GoButton)后运行,我尝试过这样做,但它只是崩溃了,有时我也会得到一个错误,即我的按钮等于零。有什么建议吗?下面的所有代码在没有按钮的情况下都可以正常工作,我希望它在按下后运行。另外,我是swift编程新手,如果这真的很简单,我很抱歉。谢谢 代码如下: override func viewDidLoad() { super.viewDidLoad() func GoButton(_ sender: Any) {

我试图调用一大块代码,以便在单击按钮(GoButton)后运行,我尝试过这样做,但它只是崩溃了,有时我也会得到一个错误,即我的按钮等于零。有什么建议吗?下面的所有代码在没有按钮的情况下都可以正常工作,我希望它在按下后运行。另外,我是swift编程新手,如果这真的很简单,我很抱歉。谢谢

代码如下:

 override func viewDidLoad() {
        super.viewDidLoad()

        func GoButton(_ sender: Any) {

        guard let APIUrl = URL(string: "https://api.openweathermap.org/data/2.5/weather?q=Crowland&appid=***APIKEY***&units=Metric") else { return }


        URLSession.shared.dataTask(with: APIUrl) { data, response, error in
            guard let data = data else { return }

            let decoder = JSONDecoder()


            do {
                let weatherData = try decoder.decode(MyWeather.self, from: data)

                if (self.MainLabel != nil)
                {
                    if let gmain = weatherData.weather?.description {
                        print(gmain)
                        DispatchQueue.main.async {
                            self.MainLabel.text! = "Current Weather in: " + String (gmain)
                        }
                    }
                }

                if (self.LocationLabel != nil)
                {
                    if let gmain = weatherData.name {
                        print(gmain)
                        DispatchQueue.main.async {
                            self.LocationLabel.text! = "Current Weather in: " + String (gmain)
                        }
                    }
                }


                if (self.HumidityLabel != nil)
                {
                    if let ghumidity = weatherData.main?.humidity
                    {
                        print(ghumidity, "THIS IS HUMIDITY")
                        DispatchQueue.main.async {
                        self.HumidityLabel.text! = String (ghumidity)
                        }
                    }
                }

                if (self.WindLabel != nil)
                {
                    if let gspeed = weatherData.wind?.speed {
                        print(gspeed, "THIS IS THE SPEED")
                        DispatchQueue.main.async {
                        self.WindLabel.text! = String(gspeed) + " mph"
                        }
                    }
                }

                if (self.TempLabel != nil)
                {
                    if let ggtemp = weatherData.main?.temp {
                        print(ggtemp, "THIS IS THE TEMP")
                        DispatchQueue.main.async {
                            self.TempLabel.text! = String (ggtemp) + " c"
                        }
                    }
                }


            } catch {
            print(error.localizedDescription)
            }
            }.resume()
            }
        }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

您的
GoButton
函数似乎在
viewDidLoad
方法中?这绝对不应该是这种情况,因为默认情况下,它们是对外部世界隐藏的


如果您使用的是情节提要,将按钮单击链接到动作的正确方法是通过情节提要和IBActions。有很多视频/文本教程向您展示如何做到这一点。这里是一个视频教程,我个人喜欢,因为它的清晰度考虑到你是新的斯威夫特-。(我既不拥有此链接中的视频内容,也与此链接中的视频内容没有任何关联,我只是将其链接到此处,因为我认为这可能会有所帮助)。

您如何初始化按钮?在哪一行它崩溃了,或者请用崩溃结果更新您的问题