2017-01-11 2 views
0

Я пытаюсь отобразить две метки в подробном представлении приложения master-detail. Я хочу, чтобы на первом лейбле отображалось имя ресторана, а второе - текущее местоположение пользователей. Я успешно реализовал `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 только name и UILabelCurrentLocation к currentLocationLabel. Во-вторых, было бы проще настроить соответствующую метку свойства в соответствующем блоке didSet. Кроме того, я использовал flatMap - который в случае currentLocation, если nil, вернет nil - в противном случае currentLocation будет обработан и возвращен закрытием.

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

var currentLocation: Coordinate? { 
    didSet { 
     currentLocationLabel?.text = currentLocation.flatMap { "\($0.latitude), \($0.longitude)" } 
    } 
} 
Смежные вопросы