我正在尝试在master-detail app的详细视图中显示两个标签。我希望第一个标签显示“餐馆名称”,第二个标签显示“用户当前位置”。我已成功实现`locationManager',并在控制台中获得正确的当前用户坐标。但是,我想在标签的文本中显示坐标。我假设以下代码为什么第二个标签在接收坐标之前设置的问题。实施它最好的是什么?
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 :(得分:0)
首先,我建议将RestaurantName
类中的Restaurant
属性重命名为name
,将UILabel
CurrentLocation
重命名为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)" }
}
}