它出现在Swift中,我们可以超载现有的一元和二元运算符。事实上,当我声明一个变量作为诠释,我可以按如下查看其后缀++声明:Swift如何实现运算符++和 - ?
postfix public funC++(inout x: Int) -> Int
但是,当我重载后缀++我自己的课,我可以达到与++相同的效果。 (价值改变后使用返回值)
或者我只是不能做同样的事情,自定义前缀运算符没有区别于后缀运算符?
它出现在Swift中,我们可以超载现有的一元和二元运算符。事实上,当我声明一个变量作为诠释,我可以按如下查看其后缀++声明:Swift如何实现运算符++和 - ?
postfix public funC++(inout x: Int) -> Int
但是,当我重载后缀++我自己的课,我可以达到与++相同的效果。 (价值改变后使用返回值)
或者我只是不能做同样的事情,自定义前缀运算符没有区别于后缀运算符?
这是琐碎的结构体(无耻借款t4nhpt的答案)
postfix funC++ (inout foo: Foo) -> Foo {
let tmp = foo
foo.bar++
return tmp
}
struct Foo {
var bar = 0
}
它带班更难,因为他们是引用类型。您必须创建一个开始增加的副本。下面的工作,但可能很难延伸到更复杂的类
postfix funC++ (inout foo: Foo) -> Foo {
let tmp = foo
foo = Foo(bar: tmp.bar + 1)
return tmp
}
class Foo {
var bar = 0
init(bar: Int)
{
self.bar = bar
}
}
var baz1 = Foo(bar: 1)
let baz2 = baz1++
print("\(baz1.bar), \(baz2.bar)") // Prints 2, 1
baz1++
print("\(baz1.bar), \(baz2.bar)") // Prints 3, 1
这是你想要的吗?
prefix funC++ (inout foo: Foo) -> Foo {
foo.bar++
return foo
}
class Foo {
var bar = 0
}
使用:
var foo = Foo()
++foo
print(foo.bar)
我觉得X.L.Ant的建议是我想要的。但是,无论如何感谢:) –
为什么你不能?提示:有一个临时变量:) –
@ X.L.Ant啊哈我看到了!非常感谢。这也意味着我们应该限制价值类型的使用,对吗? –
我不确定我明白你的意思。 –