![](/img/trans.png)
[英]Xcode 9 + Cocoapods: 'No such module' even though I can use the module
[英]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.