【问题标题】:Can I use the ! operator on a property?我可以用吗!财产上的运营商?
【发布时间】:2016-01-20 16:53:39
【问题描述】:

是否可以在属性上使用!(not, or bang) 运算符?我想这样做的原因是因为我可能会找到一个与我想要做的完全相反的属性。这是我想到的一个例子。

GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 2;
request.maxPlayers = 2;
request.!playerGroup = MyMap_Forest | MyRulesCaptureTheFlag;

我从Apple Docs 得到这个例子并修改它。

文档是这样说的:

如果您的游戏设置了playerGroup 属性,则只有请求共享相同playerGroup 值的玩家才会被Game Center 自动处理。将playerGroup 属性设置为0 允许玩家匹配到任何等待匹配。将 playerGroup 属性设置为非零数字,以仅将玩家与匹配请求共享相同玩家组号的玩家匹配。

【问题讨论】:

  • 那就是request.playerGroup = !(MyMap_Forest | MyRulesCaptureTheFlag);
  • 您无法使用建议的语法做您想做的事情。 @Leo 的语法正是你所需要的。
  • 呃,假设MyMap_ForestMyRulesCaptureTheFlag 不为零,那么!(MyMap_Forest | MyRulesCaptureTheFlag) 将始终为零。我怀疑这是我们想要的。
  • 如果指定的值是位掩码,那么所需的结果可能是request.playerGroup = ~(MyMap_Forest | MyRulesCaptureTheFlag);。这将反转位掩码,因此它包括除两组之外的所有内容。但如果这些值不是位掩码,这也行不通。
  • 如果这是一个位掩码,那么这将是切换到 Swift 的一个很好的理由,您可以在其中操作位掩码 as sets 并且做您想做的事情是微不足道的。但事实并非如此。 :)

标签: ios objective-c properties operators not-operator


【解决方案1】:

您似乎想要做的事情是不可能的。 playerGroup 属性只有两种可能的语义:如果为 0,则匹配任何内容;如果它是任何非零值,那么它只匹配具有相同值的请求。

没有办法实现“匹配任何除了这个值”。这与语言或语法无关。这完全取决于 Apple 如何定义 playerGroup 属性。其语义存在于框架和服务器端的实现中。希望某些假设的语言特性可以在这些代码中引发不同的行为是不明智的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多