繁体   English   中英

为什么我的 Xcode 编译器告诉我我使用的是值类型,即使我使用的是类?

[英]Why does my Xcode compiler tell me I use a value type even though I use classes?

我有两个classes :Player 和 Enemy,它们都符合 CharacterCharacteristicsProtocol protocol

class Enemy: CharacterCharacteristicsProtocol {...
class Player: CharacterCharacteristicsProtocol {...

它们都是references而不是像structs那样的values 仍然当我像这样将objects作为 arguments 发送时:

viewModel.combatButtonIsClicked(attacker: self.player, defender: self.enemy) { result in...

我得到错误

将“CharacterCharacteristicsProtocol”类型的值传递给 inout 参数需要显式的“&”

为什么会出现这个? 这不应该只发生在structs上吗?

如果我按照编译器的意愿进行操作,并在适当的位置插入inout& ,除了现在出现错误的闭包之外,一切正常

Escaping 闭包捕获 'inout' 参数 'characterVM'

这是它发生的地方(只是为了完成):

func enemyTurn(enemyVM: CharacterCharacteristicsProtocol, characterVM: inout CharacterCharacteristicsProtocol, completion: @escaping(_ enemyReponse: String) -> Void){
    let xEnemy = enemyVM.getX()
    let yEnemy = enemyVM.getY()
        
    viewModel.enemyShouldMove = true

    viewModel.proximityCheck(checkProxyForWho: .enemy, i: xEnemy, j: yEnemy, completion: {
        let combat = Combat()
        combat.combat(attacker: enemyVM, defender: &characterVM, completion: { result in...

我搜索了如何解决此错误并得到以下建议:“将结构更改为类”...

你的协议class绑定了吗? 如果不是,编译器需要假设一个struct也可以实现它并且需要应用值语义。
要绑定协议 class,您只需要这样做:
protocol CharacterCharacteristicsProtocol: class

然后您将只能使用类而不是结构来实现它,并且编译器将能够假定仅引用语义适用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM