gpt4 book ai didi

swift - 如何将实例方法连接到我的对象

转载 作者:行者123 更新时间:2023-11-30 12:31:31 24 4
gpt4 key购买 nike

大家好!

编写了为我生成播放器的代码:

class PlayerPlane: SKSpriteNode {


static func populatePlayerPlane() -> SKSpriteNode {
let playerPlane = SKSpriteNode(imageNamed: "airplane_1_14")
playerPlane.position = CGPoint(x: 200, y: 200)
playerPlane.zPosition = 50
return playerPlane
}

func fireEnemies() {
print("Attack")
}
}

由于它是使用 SKSpriteNode 生成的,因此我无法附加方法 fireEnemies。现在我无法将其从 SKSpriteNode 转换为 PlayerPlane

当然,我可以使用PlayerPlane初始化程序以其他方式进行所有操作,但可能我错过了一些东西,并且还有其他更智能的解决方案可以将方法fireEmenies附加到PlayerPlane的实例

最佳答案

如果您需要 PlayerPlane 作为类,那么您可以这样做(因为 PlayerPlaneSKSpriteNode 的子类,您可以使用它是初始化器):

class PlayerPlane: SKSpriteNode {

static func populatePlayerPlane() -> PlayerPlane {
let playerPlane = PlayerPlane(imageNamed: "airplane_1_14")
playerPlane.position = CGPoint(x: 200, y: 200)
playerPlane.zPosition = 50
return playerPlane
}

func fireEnemies() {
print("Attack")
}
}

但是您也可以使用协议(protocol)并为 SKSpriteNode 编写扩展,如果您想让其他对象/结构采用 PlayerPlane 功能,这会很方便:

protocol PlayerPlane {

func fireEnemies()
}

extension SKSpriteNode : PlayerPlane {

func fireEnemies() {
print("Attack")
}

}

extension SKSpriteNode {

static func populatePlayerPlane() -> SKSpriteNode {
let playerPlane = SKSpriteNode(imageNamed: "airplane_1_14")
playerPlane.position = CGPoint(x: 200, y: 200)
playerPlane.zPosition = 50
return playerPlane
}

}

最后,当您想要“其他”方式将 fireEnemies 功能附加到 PlayerPlane 时,您还可以为协议(protocol)编写扩展:

class PlayerPlane: SKSpriteNode {

static func populatePlayerPlane() -> PlayerPlane {
let playerPlane = PlayerPlane(imageNamed: "airplane_1_14")
playerPlane.position = CGPoint(x: 200, y: 200)
playerPlane.zPosition = 50
return playerPlane
}
}


protocol FireEnemies {
func fireEnemies()
}

extension PlayerPlane : FireEnemies {
func fireEnemies() {
print("Attack")
}
}

关于swift - 如何将实例方法连接到我的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43490282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com