【发布时间】:2017-12-21 09:58:57
【问题描述】:
Swift 允许定义我们自己的优先级组以用于我们的自定义运算符。我很难理解一件事,那就是布尔 assignment 属性。
来自Swift 编程语言(Swift 3.1):
优先级组的分配指定运算符在包含可选链接的操作中使用时的优先级。当设置为
true时,相应优先级组中的运算符在可选链接期间使用与标准库中的赋值运算符相同的分组规则。否则,当设置为false或省略时,优先组中的运算符遵循与不执行赋值的运算符相同的可选链接规则。
它并没有说明assignment 属性的确切行为。可选链中的赋值运算符和非赋值运算符有什么区别?
我定义了++=(行为类似于+=)和++(行为类似于+)运算符以及用于测试的AssignmentTesting结构。
precedencegroup AssignmentTrue {
assignment: true
}
precedencegroup AssignmentFalse {
assignment: false
}
infix operator ++=: AssignmentTrue
infix operator ++: AssignmentFalse
extension Int {
static func ++= (left: inout Int, right: Int) {
left += right
}
static func ++ (left: Int, right: Int) -> Int {
return left + right
}
}
struct AssignmentTesting { var number = 0 }
var assignmentTesting: AssignmentTesting? = AssignmentTesting()
assignmentTesting?.number ++= 3 // assigns 0 + 3 to assignmentTesting.number
assignmentTesting!.number ++ 5 // returns 3 + 5
assignmentTesting?.number // == 3
assignment: true 和 assignment: false 如何影响这些行为?非常欢迎任何解释。
【问题讨论】: