2016-05-30 126 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) 

} 
相關問題