声明的方法必须 return void (not float)

Methods declared must return void (not float)

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

@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

}

IBAction 函数可以 invoked/called 通过用户在任何 UIElements(如按钮、开关、段控制器)上的交互。它的响应(return 类型)返回到用户界面元素,如果您使用 IBAction 并将该操作附加到您的 Interface Builder

,您可能无法在代码中获得浮点值

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

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

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

但是如果你真的想 return 高度和宽度(两个浮点值)作为对这个函数调用的响应,那么你应该以编程方式调用它,并像这样更改函数声明:

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)")
}

您不能 return 来自 IBAction 方法的值。所以把你的方法改成

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

并删除 return widthreturn height

如果要使用宽度和高度,请将它们设为全局变量。