什么“rect1 + = rect2”在Swift中意味着什么?

时间:2017-04-26 01:37:52

标签: swift geometry operators

这与UnionRects(rect1,rect2)相同吗?我正在尝试将一些Swift代码转换为Objective C.我在引用或Google搜索中找不到这个。

再次看到这个,我想我看到了我的问题。这是一系列的rects,而不是rect。显然,“+ =”代表阵列。

直接来自Apple's sample code for Photos

fileprivate func differencesBetweenRects(_ old: CGRect, _ new: CGRect) -> (added: [CGRect], removed: [CGRect]) {
        if old.intersects(new) {
            var added = [CGRect]()
            if new.maxY > old.maxY {
                added += [CGRect(x: new.origin.x, y: old.maxY, width: new.width, height: new.maxY - old.maxY)]
            }
...
}

1 个答案:

答案 0 :(得分:3)

经过编辑的问题清楚地表明您曾在两个+=上询问有关使用Array的问题。这会将正确数组的内容附加到左侧数组中,如您所想。它在" Accessing and Modifying an Array"下的文档中有所描述。

以下是我的原始答案,保留给在+= s之间寻找CGRect这个问题的人。

如果rect1rect2CGRect矩形,那么rect1 += rect2在标准Swift中无效。

如果您在工作代码中看到这一点,则意味着他们重载了+=复合赋值运算符(请参阅documentation)以接受CGRect并执行自己的自定义函数。知道它的作用的唯一方法是在代码中找到它。

以下是使用+=的联合函数重载CGRect代码的代码:

func += (left: inout CGRect, right: CGRect) {
    left = left.union(right)
}

如果您在代码库中搜索" inout CGRect"它的各种排列,你可能会把代码负责,这将有助于弄清楚它的作用。