【问题标题】:Methods declared must return void (not float)声明的方法必须返回 void(不是浮点数)
【发布时间】:2018-03-15 10:36:58
【问题描述】:

我正在尝试使用标准 UIButton 函数返回两个浮点值,宽度和高度。我添加了“-> Float”,但我收到了这个错误。如果我将其更改为“-> Void”,那么我将在 void 函数中留下 Unexpected non-void return value。我在这里做错了什么?

@IBOutlet weak var buttonValue: UIButton!
@IBAction func smallB(_ sender: Any) -> Float {

    var inital = 2
    let divisble = 2

    var width: Float
    var height: Float



    if inital % divisble == 0
    {
        width = 0.14
        height = 0.07
        buttonValue.titleLabel?.text = "Big"
        inital + 1
    }
    else
    {
        width = 0.28
        height = 0.14
        buttonValue.titleLabel?.text = "Small"
        inital + 1
    }

    return width
    return height

}

【问题讨论】:

  • 您想向谁返回值?
  • 一个全局变量
  • 你不返回变量,你返回代码。您可以为变量赋值。这是通过赋值运算符= 完成的。
  • 如果你需要返回多个值,那么你可以使用元组!
  • 我需要返回宽高,哈哈。在这种情况下,元组有什么帮助?

标签: ios swift uibutton ibaction


【解决方案1】:

IBAction 函数可以通过用户交互在任何 UIElement(如 Button、Switch、Segment Controller)上调用/调用。它的响应(返回类型)返回到用户界面元素,如果您使用 IBAction 并将该操作附加到您的界面生成器,您可能无法在代码中获得浮点值

如果您已将方法与您的 Interface Builder Button 元素连接,请从您的 IBAction 方法中删除返回类型。如果您的操作是从 IBOutlet 元素生成的,那么返回值对您来说毫无意义。

@IBAction func smallB(_ sender: Any) {
   // action contents

   // also remove following return statements
   // return width
   //  return height
}

但是,如果您真的想返回高度和宽度(两个浮点值)作为对该函数调用的响应,那么您应该以编程方式调用它,并更改函数声明,如下所示:

func smallBTest(_ sender: Any) -> CGSize {
   // action contents

  //Update your return statement like
  return CGSize(width: width, height: height)
}

let size: CGSize = smallBTest(<button instance > buttonValue)
print("Size: Width = \(size.width)  -- Height = \(size.Height)")

// or you can try this as well
@IBAction func smallB(_ sender: Any) {
  let size: CGSize = smallBTest(sender)
   print("Size: Width = \(size.width)  -- Height = \(size.Height)")
}

【讨论】:

  • 现在我在返回宽度和高度旁边有“在 void 函数中出现意外的非 void 返回值”。
  • 从您的 IBAction 中移除返回宽度、返回高度
  • 我只是为 jonpeter 添加评论,根据他的问题,他从 IBAction 返回宽度和高度。所以他需要从他的 IBAction 方法中删除这部分。你的答案很好。但是你也可以使用元组而不是 CGSize。
  • 我为最后的回复道歉。 smallB func和smallBTest func中的action内容有什么区别?
  • @jonpeter IBAction 是一个函数,可以通过用户在任何 UI 元素(如按钮、开关、段控制器)上的交互来调用/调用。并且它的响应(返回类型)返回到用户界面元素,如果您使用 IBAction 并将该操作附加到您的界面生成器,您可能无法在代码中获得浮点值
【解决方案2】:

您不能从 IBAction 方法返回值。所以把你的方法改成

@IBAction func smallB(_ sender: Any) {
 // your logic
}

并删除 return width, return height

如果您想使用宽度和高度,请将它们作为全局变量。

【讨论】:

  • 我做了,但您能解释一下如何在函数中更新全局变量值吗?
  • @jonpeter 什么问题。您是否删除了return width, return height 的退货声明。解释问题
猜你喜欢
  • 2014-04-15
  • 2018-03-18
  • 2018-03-09
  • 1970-01-01
  • 2021-12-01
  • 2015-06-29
  • 2019-01-06
  • 2017-06-12
  • 1970-01-01
相关资源
最近更新 更多