2016-05-30 110 views
1

我想了解参数斯威夫特是如何工作的,因此写了一个简单的类如下无法转换int类型的值与预期参数类型“...”

class NumberIncreaser { 


func numberIncrementor(var number:Int)->Int{ 
    number += 1 
    return number 
} 


var anotherNumber = numberIncrementor(3) 



} 

然而即使明确提的是,方法'numberIncrementor'需要一个Int,Xcode需要一个numberIncreaser对象(希望我使用正确的术语,而不是编程)。我注意到,当我删除类的方法工作得很好。我想知道为什么这是如此,我该如何解决它。

谢谢!

+0

您的问题是在class'的'范围执行代码。你需要在'methods'或'global'作用域的范围内做到这一点。 –

回答

1

您的代码不会编译。试想一下:

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() 
+0

这肯定会奏效。但是,如果条件是另一个数字必须在班级内初始化,你会怎么做? –

+1

@AkshanshThakur考虑第二个变体。它回答你的问题吗? –

+0

等一下,我明白了。干得好,我会花一些时间在上面。感谢您的回应。 –

0

此外,在FUNC参数声明不使用VAR:

class NumberIncreaser { 
    static func numberIncrementor(number: Int) -> Int { 
     let answer = number + 1 
     return answer 
    } 
} 

var anotherNumber = NumberIncreaser.numberIncrementor(3) 
+0

没有错误,但这不会输出结果。 –

0

var参数已被弃用从而号码是常数使其不可变。您也不能拨打numberIncrementor,因为它是一种实例方法。

出路是通过classstatic关键字前缀的声明作出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) 

} 
相关问题