2017-04-26 71 views
0

這和UnionRects(rect1,rect2)一樣嗎?我正在嘗試將一些Swift代碼翻譯爲Objective C.我無法在引用或谷歌搜索中找到它。Swift中的「rect1 + = rect2」是什麼意思?

看過這個之後,我想我看到了我的問題。這是一系列的反派,而不是一個正義。顯然,「+ =」是針對數組的。

這是直出的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)] 
      } 
... 
} 
+2

你在說CGREct嗎? CGRect沒有內置的'+ ='運算符。你有這樣一個運營商的自定義實現嗎? – rmaddy

+0

既然你已經發布了真實的代碼,你的問題就解決了。你沒有執行'CGRect'的聯合。您正在爲'CGRect'數組添加一個'CGRect'。方括號是一個數組。 – rmaddy

回答

3

編輯的問題講清楚,你問兩個Array S使用+=。正如你想象的那樣,這將右數組的內容附加到左數組。它在文檔「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」代碼庫及其各種排列組合,你可能會調高代碼負責,這將有助於瞭解它的功能。

+0

我很確定這不會沒有也使用**中綴運算符**生成。 (它並不適合我) – dfd

+0

@dfd它在Xcode 8.3.2的iOS遊樂場中爲我構建並運行良好。它給了你一個錯誤? – Robert

+0

二。也許是我的錯,但是在一個全新的項目中,他們仍然只有你擁有的唯一代碼。 (是的,我之前的評論並沒有清除構建錯誤@Robert,你是否嘗試過這個函數的新功能?即使它構建,調用不會變成* let myNewRect = + - (&myRect,right my沒有任何其他代碼的語法是非常糟糕的 – dfd