2017-01-11 104 views
0

我試圖在主 - 細節應用程序的詳細視圖中顯示兩個標籤。我希望第一個標籤顯示'餐廳名稱',第二個標籤'用戶當前位置'。我已經成功實現了`locationManager',並在我的控制檯中獲得了正確的當前用戶座標。但是,我想在標籤的文本中顯示座標。我假設爲什麼下面的代碼是第二個標籤在收到座標之前設置的問題。什麼是最好的實施它?使用座標更新UILabel.text

func configureView() { 

//to display label with restaurant name 
    if let restaurant = self.restaurant { 
     if let label = self.restaurantNameLabel { 
      label.text = restaurant.RestaurantName 
     } 
    } 

//to display label with user's Latitude and Longitude: 

    if let label = self.CurrentLocation { 
     label.text = "\(currentLocation?.longitude)" 
    } 
} 

我也有didSet方法:

var restaurant: Restaurant? { 
    didSet { 
     self.configureView() 
    } 
} 

var currentLocation: Coordinate? { 
    didSet { 
     self.configureView() 
    } 
} 

回答

0

首先,我建議重命名RestaurantName財產在Restaurant類只是nameUILabelCurrentLocationcurrentLocationLabel。其次,在其各自的didSet區塊中配置該物業的相應標籤會更簡單。此外,我已經使用了flatMap - 如果是currentLocation(如果爲零),將返回零 - 否則,currentLocation將被操作並由閉包返回。

var restaurant: Restaurant? { 
    didSet { 
     restaurantNameLabel?.text = restaurant.flatMap { $0.name } 
    } 
} 

var currentLocation: Coordinate? { 
    didSet { 
     currentLocationLabel?.text = currentLocation.flatMap { "\($0.latitude), \($0.longitude)" } 
    } 
}