我想要"分配或"和"分配和"运营商。根据{{3}},这些运算符在标准库中定义。
我尝试为Bool
值实现这些运算符:
func ||= (inout lhs: Bool, rhs: Bool) {
lhs = lhs || rhs
}
func &&= (inout lhs: Bool, rhs: Bool) {
lhs = lhs && rhs
}
但编译器抱怨:operator implementation without matching operator declaration
这可以通过定义运算符来解决:
infix operator ||= { associativity right precedence 90 }
infix operator &&= { associativity right precedence 90 }
但我不确定这是正确的做法。为什么标准库中的定义不起作用?另外,我注意到根据运营商参考标准库,没有针对任何类型的这些运算符的实现。这是为什么?这是疏忽还是故意的?
答案 0 :(得分:5)
关于运营商的文档已经过时,之前在this answer的评论中已经提到过;我引用用户Airspeed Velocity:
是的,检查过它( ed。注意:指的是运营商
&&=
)只是 曾经被定义为早期版本的运营商,而且从未 实际上在任何函数中实现,然后完全删除。 文档错了。
您可以通过Cmd
- 点击{/ 1>}中的Swift
轻松查看实际定义的运营商
import Swift
例如一个操场。
或者,请查看Policy.swift
源代码中的标准运算符部分:
在上述两个方面,显而易见的是&&=
和||=
都不是本地定义的。
如果您对这些运营商的实施方式感兴趣(回到Swift 1.1),可能会对以下帖子感兴趣: