无法转换int类型的值与预期参数类型“...”
我想了解参数斯威夫特是如何工作的,因此写了一个简单的类如下无法转换int类型的值与预期参数类型“...”
class NumberIncreaser {
func numberIncrementor(var number:Int)->Int{
number += 1
return number
}
var anotherNumber = numberIncrementor(3)
}
然而即使明确提的是,方法'numberIncrementor'需要一个Int,Xcode需要一个numberIncreaser对象(希望我使用正确的术语,而不是编程)。我注意到,当我删除类的方法工作得很好。我想知道为什么这是如此,我该如何解决它。
谢谢!
您的代码不会编译。试想一下:
class NumberIncreaser {
static func numberIncrementor(var number:Int)->Int{
number += 1
return number
}
}
var anotherNumber = NumberIncreaser.numberIncrementor(3)
或者一个另一种变体:
class Number {
var number: Int
init(number: Int) {
self.number = number
}
func increasedNumber() -> Int {
return number + 1
}
}
var anotherNumber = Number(number: 3).increasedNumber()
这肯定会奏效。但是,如果条件是另一个数字必须在班级内初始化,你会怎么做? –
@AkshanshThakur考虑第二个变体。它回答你的问题吗? –
等一下,我明白了。干得好,我会花一些时间在上面。感谢您的回应。 –
此外,在FUNC参数声明不使用VAR:
class NumberIncreaser {
static func numberIncrementor(number: Int) -> Int {
let answer = number + 1
return answer
}
}
var anotherNumber = NumberIncreaser.numberIncrementor(3)
没有错误,但这不会输出结果。 –
var
参数已被弃用从而号码是常数使其不可变。您也不能拨打numberIncrementor
,因为它是一种实例方法。
出路是通过class
或static
关键字前缀的声明作出numberIncrementor
类或静态方法:class func numberIncrementor
和你怎么称呼它,像这样:NumberIncreaser.numberIncrementor(3)
。
class NumberIncreaser {
class func numberIncrementor(number: Int) -> Int {
return number + 1
}
var anotherNumber = NumberIncreaser.numberIncrementor(3)
}
另一种方法是使anotherNumber
一个懒惰的性质,象这样:
class NumberIncreaser {
func numberIncrementor(number: Int) -> Int {
return number + 1
}
lazy var anotherNumber: Int = self.numberIncrementor(3)
}
您的问题是在class'的'范围执行代码。你需要在'methods'或'global'作用域的范围内做到这一点。 –