Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 调用中缺少paramater#1的参数_Swift_Function_Arguments_Swift2 - Fatal编程技术网

Swift 调用中缺少paramater#1的参数

Swift 调用中缺少paramater#1的参数,swift,function,arguments,swift2,Swift,Function,Arguments,Swift2,我有这个函数和变量: var trianglePlacement: CGFloat func setPlacmentOfTriangle(trianglePlacementVal: CGFloat) { trianglePlacement = trianglePlacementVal } var trianglePosition: CGFloat = setPlacmentOfTriangle() * width 我稍后使用该函数对该变量进行计算: var trianglePlac

我有这个函数和变量:

var trianglePlacement: CGFloat

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat) {
    trianglePlacement = trianglePlacementVal
}
var trianglePosition: CGFloat = setPlacmentOfTriangle() * width
我稍后使用该函数对该变量进行计算:

var trianglePlacement: CGFloat

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat) {
    trianglePlacement = trianglePlacementVal
}
var trianglePosition: CGFloat = setPlacmentOfTriangle() * width
我在调用中得到了参数#1的
缺少参数
错误,好吧,这很有意义,我没有传递参数

有没有一种方法可以消除错误,而不必消除参数,也不传递参数?这是它们在我的代码中出现的唯一次数

如果您感到好奇,这是变量
宽度

var width: CGFloat = self.menubar.frame.size.width

这是因为
setPlacementofTriangle
应该将
CGFloat
作为参数,而不是发送它

如果不总是希望传递参数,则可以将其设置为可选,如下所示:

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat?) {
    if let tri = trianglePlacementVal as? CGFloat {
        trianglePlacement = tri 
    }
}
然后可以将
nil
作为参数传递:

setPlacmentOfTriangle(nil)

这是因为
setPlacementofTriangle
应该将
CGFloat
作为参数,而不是发送它

如果不总是希望传递参数,则可以将其设置为可选,如下所示:

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat?) {
    if let tri = trianglePlacementVal as? CGFloat {
        trianglePlacement = tri 
    }
}
然后可以将
nil
作为参数传递:

setPlacmentOfTriangle(nil)

是的,有一种方法可以在不传入参数的情况下调用函数。您可以为函数参数提供默认值,如下所示:

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat = 1.0) {
    trianglePlacement = trianglePlacementVal
}
然后你这样称呼它:

setPlacmentOfTriangle()
如果调用SetPlacementOfTriangle函数,只要不提供自己的参数,它就会使用1.0的值

我想这是一个简化的例子,但是这个函数根本不是必需的。您真的应该直接设置trianglePlacement的值,而不是像您这样使用函数。此外,这一行也不起作用:

var trianglePosition: CGFloat = setPlacmentOfTriangle() * width

SetPlacementOfTriangle函数不返回值,因此不能与宽度相乘。

是的,有一种方法可以在不传入参数的情况下调用函数。您可以为函数参数提供默认值,如下所示:

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat = 1.0) {
    trianglePlacement = trianglePlacementVal
}
// This is not very functional, avoid mutating other scopes
var trianglePlacement: CGFloat = 0

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat) {
    trianglePlacement = trianglePlacementVal
}
然后你这样称呼它:

setPlacmentOfTriangle()
如果调用SetPlacementOfTriangle函数,只要不提供自己的参数,它就会使用1.0的值

我想这是一个简化的例子,但是这个函数根本不是必需的。您真的应该直接设置trianglePlacement的值,而不是像您这样使用函数。此外,这一行也不起作用:

var trianglePosition: CGFloat = setPlacmentOfTriangle() * width
SetPlacementOfTriangle函数不返回值,因此不需要与宽度相乘

// This is not very functional, avoid mutating other scopes
var trianglePlacement: CGFloat = 0

func setPlacmentOfTriangle(trianglePlacementVal: CGFloat) {
    trianglePlacement = trianglePlacementVal
}





因为setPlacementOfTriangle:没有返回值,您的计算无论如何都会失败。我建议:func setPlacementOfTriangle(trianglePlacementVal:CGFloat)->CGFloat{trianglePlacement=trianglePlacementVal,return trianglePlacement}因为setPlacementOfTriangle:没有返回值,您的计算无论如何都会失败。我建议:func setPlacementOfTriangle(trianglePlacementVal:CGFloat)->CGFloat{trianglePlacement=trianglePlacementVal,return trianglePlacement}