gpt4 book ai didi

Swift:覆盖方法具有不兼容的类型

转载 作者:行者123 更新时间:2023-11-28 07:02:38 25 4
gpt4 key购买 nike

今天我遇到了一个非常奇怪的错误。这段代码被精简到最低限度,但应该足够了:

class Sprite: SKSpriteNode {
func setup(pos: CGPoint) {}
}

class Enemy: Sprite {
func setup(health: Int) {}
}

敌人类内部的行导致错误。奇怪的是,我找到了几个修复程序,但我不知道它们为什么修复它。

第一个修复:不要让 Sprite 继承 SpriteKit 类。删除它或将 SKSpriteNode 更改为随机的东西(如 NSEvent)可以修复错误。

其次:将pos:的参数类型改成我自己定义的类或者增加更多的参数。

最后:将 health: 的参数类型更改为我自己定义的类或添加更多参数。将类型更改为 String、CGSize 或类似内容并不能解决错误。

在我当前的代码中,Enemy.setup 接受的参数不仅仅是生命值,所以这不是真正的问题,但我很好奇是什么导致了错误以及为什么要添加更多参数或更改 Sprite 的父类修复它。

最佳答案

当对 Objective-C 对象进行子类化时,不能有两个具有相同选择器名称的不同方法。这两种方法都转换为 setup:。如果有人在 Enemy 上调用了 setup: 选择器,则不清楚要使用哪个实现。 Objective-C 会将这些方法视为具有相同的名称,但 Swift 会因为类型差异而区别对待它们。

以不同的方式命名它们是最简单的解决方案:

class Sprite: SKSpriteNode {
func configurePosition(pos: CGPoint) {}
}

class Enemy: Sprite {
func configureHealth(health: Int) {}
}

参见 this question了解更多解释和上下文。

关于Swift:覆盖方法具有不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685087/

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