在调用中缺少参数#1的参数

时间:2015-12-01 16:03:59

标签: swift function arguments swift2

我有这个功能和变量:

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

3 个答案:

答案 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)