【问题标题】:Swift 3, customize the "=" equals operator ? (Not equality, "==") [duplicate]Swift 3,自定义“=”等于运算符? (不相等,“==”)[重复]
【发布时间】:2016-11-02 19:20:34
【问题描述】:

我有课

public class Thing

喜欢这个

var blah:Thing
blah.name = "text"

我想到了,如果我可以“覆盖等号”,当右边的项目是一个字符串时,那就太棒了。

那么你可以拥有

var blah:Thing
var x:Thing

blah = "text"   // Swift knows I mean blah.name = "text"
blah = x        // Swift knows I mean blah becomes x as normal

我是否遗漏了一些明显的东西?怎么办?

请注意,您当然可以接管下标操作,使用 public subscript 这太棒了。你能接过“=”等号吗?

【问题讨论】:

标签: swift operators swift3


【解决方案1】:

You can't override the = operator in Swift:

注意

令牌=、->、//、/*、*/、.,前缀运算符<、&和?, 中缀运算符?,后缀运算符>、!、?保留。 这些令牌不能重载,也不能用作自定义 运营商。

它可以在 C++ 中完成,主要是由于需要手动管理内存。多亏了 ARC,这在 Swift 中是不必要的,它只会给你的代码添加不必要的烟雾和镜子,以及各种令人困惑的隐式行为。

【讨论】:

  • Shame... 想要覆盖 a: Float = b: CGFloat ,反之亦然,所以我不必一直到处乱扔......
  • @LordZsolt 这个演员阵容是有损的。在自定义赋值运算符后面隐藏这一点是不明智的。
  • 是的,我想你有一个观点,如果它应用于项目的每个部分,它可能会导致不必要的副作用。但是,如果您有一个独立于数学繁重的业务逻辑的 UI 架构堆栈,我认为这没有什么坏处。
猜你喜欢
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2015-05-05
  • 2022-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多