无法让 UIButton 在 Swift 4 中调用代码块
Posted
技术标签:
【中文标题】无法让 UIButton 在 Swift 4 中调用代码块【英文标题】:Can't get UIButton to call block of code in Swift 4 【发布时间】:2018-08-09 23:03:10 【问题描述】:我试图在单击按钮(GoButton)后调用一大块代码来运行,我尝试过这样做,但它只是崩溃,我有时也会收到我的按钮等于 nil 的错误。有什么建议吗?如果没有按钮,下面的所有代码都可以正常工作,我希望它在按下后运行。另外,我是快速编程的新手,如果这真的很容易,我很抱歉。谢谢
代码如下:
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()
【问题讨论】:
你是如何初始化你的按钮的? 在哪一行发生了崩溃,或者请用崩溃结果更新您的问题 【参考方案1】:您的GoButton
函数似乎在您的viewDidLoad
方法中?这绝对不应该是这种情况,因为nested functions 默认情况下对外界是隐藏的。
如果您使用情节提要,将按钮单击链接到操作的正确方法是通过情节提要和 IBActions 来完成。有很多视频/文本教程向您展示如何做到这一点。这是一个我个人喜欢的视频教程,因为它很清晰,因为你是 Swift 新手 - https://www.youtube.com/watch?v=Opz3juSW43Q。 (我既不拥有也不与此链接中的视频内容有任何关联,我只是将其链接到此处,因为我认为它可能会有所帮助。
【讨论】:
以上是关于无法让 UIButton 在 Swift 4 中调用代码块的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIButton 添加到 Swift Playground?
如何从firebase数据库中检索url并通过UIButton(SWIFT)显示url?