Ich bin relativ neu zu Swift, und ich wollte wissen, ob es eine Möglichkeit gab, die Eigenschaft einer Klasse in einem separaten Klasseninitialisierer zu referenzieren? Zum Beispiel: Wenn ich eine Klasse Person
mit der Eigenschaft position
habe, gibt es eine Möglichkeit, eine Pants
Klasse zu initialisieren, so dass ihre position
das gleiche wie Person
ist? Hier ist mein Code ist:Verwenden einer Klasse (oder Instanz) -Eigenschaft innerhalb eines anderen Klasseninitialisierer in swift
class Pants:SKSpriteNode{
init(){
let pants = SKTexture(imageNamed: "Sprites/pants.jpg")
pants.setScale(0.5)
super.init(texture: pants, color: UIColor.clearColor(), size: pants.size())
//self.position.x = aPerson.position.x + (aPerson.size.width/2)
//self.position.y = aPerson.position.y - (aPerson.size.height * 0.04)
self.position = Person.getPos()//CGPoint(x: 200,y: 200)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
}
Zuerst versuchte ich aPerson
Referenzierung, die eine Instanz von Person
ist, aber ich erhielt den Fehler: Instance member aPerson cannot be used on type GameScene
. Ich denke, verstehen Sie, warum es nicht viel Sinn macht, in diesem Fall auf eine Instanz zu verweisen - da die Instanz zum Zeitpunkt der Referenz möglicherweise nicht existiert? Aber ich weiß nicht wirklich, was diese Fehlermeldung bedeutet - jede Klärung wäre großartig. Ich dachte dann, eine static
Getter-Methode innerhalb der Person
Klasse zu verwenden, die gerade ihre Position-Eigenschaft zurückgegeben hat. Das scheint auch nicht zu funktionieren. Irgendwelche Vorschläge wären großartig!
Es scheint nicht viel Sinn machen für eine "Person" * Klasse eine Position zu haben - Instanzen dieser Klasse, einzelne Personen, haben Positionen. –
@paulgriffiths Das macht eigentlich Sinn - irgendwelche Vorschläge, wie man das umsetzt? Als ich es versuchte, erhielt ich den Fehler: 'Instanzmitglied aPerson kann nicht am Typ GameScene verwendet werden? – Sam
'Pants' benötigt Zugriff auf eine Instanz von 'Person', wenn Sie auf Instanzattribute zugreifen möchten. Sie können entweder einen an den Initialisierer übergeben oder Sie können einen Initialisierer erstellen, je nachdem, was für Ihre Anwendung sinnvoll ist. –