2016-05-30 20 views
1

Ich habe versucht, zu verstehen, wie Parameter in Swift arbeiten und somit eine einfache Klasse schrieb wie folgtWert kann nicht vom Typ Int erwarteten Argumenttyp umwandeln ‚...‘

class NumberIncreaser { 


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


var anotherNumber = numberIncrementor(3) 



} 

jedoch auch nach dem ausdrücklich zu erwähnen, dass die Methode 'numberIncrementor' nimmt einen Int, Xcode fragt nach einem numberIncreaser-Objekt (hoffe ich verwende die richtige Terminologie, neu in der Programmierung). Ich habe bemerkt, dass die Methode beim Entfernen der Klasse vollkommen in Ordnung ist. Ich würde gerne wissen, warum das so ist und wie ich es lösen kann.

Danke!

+0

Du Problem ist bei der Durchführung von Code in Rahmen von 'CLASS':

class NumberIncreaser { class func numberIncrementor(number: Int) -> Int { return number + 1 } var anotherNumber = NumberIncreaser.numberIncrementor(3) } 

wäre ein andere Art und Weise anotherNumber eine faule Eigenschaft wie so zu machen sein. Sie müssen das im Bereich 'method' oder' global' tun. –

Antwort

1

Ihr Code wird nicht kompiliert. Bedenken Sie:

class NumberIncreaser { 

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

} 

var anotherNumber = NumberIncreaser.numberIncrementor(3) 

Oder eine andere Variante:

class Number { 

    var number: Int 

    init(number: Int) { 
     self.number = number 
    } 

    func increasedNumber() -> Int { 
     return number + 1 
    } 
} 

var anotherNumber = Number(number: 3).increasedNumber() 
+0

Das würde definitiv funktionieren. Aber wie würden Sie es tun, wenn die Bedingung ist, dass eine andere Nummer innerhalb der Klasse initialisiert werden muss? –

+1

@AkshanshThakur Betrachten Sie die zweite Variante. Beantwortet es deine Frage? –

+0

Warte, ich habe verstanden. Gute Arbeit, ich werde etwas Zeit damit verbringen. Danke für die Antwort. –

0

Auch nicht var in func Parameterdeklarationen verwenden:

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

var anotherNumber = NumberIncreaser.numberIncrementor(3) 
+0

keine Fehler, aber dies wird kein Ergebnis ausgeben. –

0

var Parameter veraltet sind somit Nummer ist eine Konstante, die es unveränderlich macht. Sie können numberIncrementor auch nicht aufrufen, da es sich um eine Instanzmethode handelt.

Ein Ausweg wäre numberIncrementor eine Klasse oder statische Methode zu machen, indem die Deklaration mit class oder static Stichwort prefixing: class func numberIncrementor und Sie es nennen wie so: NumberIncreaser.numberIncrementor(3).

class NumberIncreaser { 

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


    lazy var anotherNumber: Int = self.numberIncrementor(3) 

} 
Verwandte Themen