我有这个功能和变量:
var trianglePlacement: CGFloat
func setPlacmentOfTriangle(trianglePlacementVal: CGFloat) {
trianglePlacement = trianglePlacementVal
}
我稍后使用该函数对此变量进行计算:
var trianglePosition: CGFloat = setPlacmentOfTriangle() * width
我收到了Missing argument for parameter #1 in call
错误,没关系,我不是在辩论。
有没有办法摆脱错误而不摆脱参数和没有传入参数?这是他们出现在我的代码中的唯一时间。
如果您好奇,这是变量width
:
var width: CGFloat = self.menubar.frame.size.width
答案 0 :(得分:2)
是的,有一种方法可以在不传递参数的情况下调用函数。您可以为函数参数提供默认值,如下所示:
func setPlacmentOfTriangle(trianglePlacementVal: CGFloat = 1.0) {
trianglePlacement = trianglePlacementVal
}
然后你这样称呼它:
setPlacmentOfTriangle()
如果调用setPlacmentOfTriangle函数,则在您不提供自己的参数时,它将使用值1.0。
我猜这是一个简化的例子,但这个功能根本不是必需的。你真的应该直接设置trianglePlacement的值,而不是使用像你这样的函数。此外,此行不起作用:
var trianglePosition: CGFloat = setPlacmentOfTriangle() * width
setPlacmentOfTriangle函数不返回值,因此没有任何东西可以与宽度相乘。
答案 1 :(得分:1)
// This is not very functional, avoid mutating other scopes
var trianglePlacement: CGFloat = 0
func setPlacmentOfTriangle(trianglePlacementVal: CGFloat) {
trianglePlacement = trianglePlacementVal
}
// this is better
var trianglePlacement: CGFloat = 0
func setPlacmentOfTriangle(trianglePlacementVal trianglePlacementVal: CGFloat) -> CGFloat {
return trianglePlacementVal
}
// this is a function with a default param value
var trianglePlacement: CGFloat = 0
func setPlacmentOfTriangle(trianglePlacementVal trianglePlacementVal: CGFloat = 0.0) -> CGFloat {
return trianglePlacementVal
}
答案 2 :(得分:0)
这是因为setPlacmentOfTriangle
应该使用CGFloat
作为参数,而您不会发送一个
如果你不总是想传递一个参数,那么你可以像下面这样选择它:
func setPlacmentOfTriangle(trianglePlacementVal: CGFloat?) {
if let tri = trianglePlacementVal as? CGFloat {
trianglePlacement = tri
}
}
然后您可以将nil
作为参数传递:
setPlacmentOfTriangle(nil)