2016-10-17 93 views
1

我最近開始使用Build Time Analyzer分析Swift項目的編譯時間:https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode。我注意到,這個方法尤其是編譯很慢:什麼導致Swift代碼塊的編譯速度比其他更慢?

func placeStatusSwitch() { 
     let switchX = tableView.center.x - (statusSwitch.frame.width/2) 
     var switchY = tableView.contentInset.top - statusSwitch.frame.height + tableView.contentOffset.y 

     if let refreshControl = refreshControl { 
      let navigationBarHeight = navigationController?.navigationBar.frame.height ?? 0 
      let expectedTopInset = UIApplication.shared.statusBarFrame.height + navigationBarHeight + statusSwitch.frame.height + MyTheme.verticalMargin - 4 

      if tableView.contentInset.top >= expectedTopInset || refreshControl.isRefreshing { 
       switchY = switchY - refreshControl.frame.height 
      } 
     } 

     statusSwitch.frame = CGRect(x: switchX, y: switchY, width: statusSwitch.frame.width, height: statusSwitch.frame.height) 
    } 

我嘗試使用,而不是改變無合併運算符:

var navigationBarHeight: CGFloat = 0 
      if let navBarHeight = navigationController?.navigationBar.frame.height { 
       navigationBarHeight = navBarHeight 
      } 

然而,編譯時間仍然很慢。任何想法可能會導致經濟放緩?

+0

爲了減慢執行速度,您必須熟悉gcd ..在此運行過程中,您希望在後臺運行速度更慢。並在執行期間用當前進程對其進行管理。這完全是關於線程管理。 – JAck

+0

科學野驢猜測(SWAG):它可以在算術表達式的類型推斷?如果你給這些明確的類型有幫助嗎? –

+0

@ColinBarrett你的意思是'switchX'等加入'CGFloat'? – KexAri

回答

0

你還可以嘗試:

  1. 添加顯式類型註解,而不是推斷類型。
  2. 將較長的數學計算分解爲較小的數學計算。
相關問題