我想弄清楚Swift中的最后一行是否有更短的语法:
var startPosition: CLLocationCoordinate2D?
var latitude: Double?
var longitude: Double?
// ...
// Here I have skipped some code which may or may not assign values
// to "latitude" and "longitude".
// ...
if latitude != nil && longitude != nil {
startPosition = CLLocationCoordinate2DMake(latitude!, longitude!)
}
如您所见,我想基于“纬度”和“经度”设置“startPosition”,如果已经分配了这些值。否则,我接受“startPosition”将不会被初始化。
我想这可能是“如果让”或类似的东西,但我没有弄清楚如何。 (我在Objective-C方面很有经验,但刚刚开始学习Swift。)
答案 0 :(得分:6)
这不短,但你可以简单地做
if let latitude = latitude, let longitude = longitude {
startPosition = CLLocationCoordinate2D(latitude: latitude,
longitude: longitude)
}
注意我只使用了CLLocationCoordinate2D,而不是CLLocationCoordinate2DMake。 Swift为大多数常见对象提供没有“make”的构造函数,因此通常不必在构造函数中使用“make”。
答案 1 :(得分:1)
如果您不想执行任何代码,如果他们没有使用后卫。
var startPosition: CLLocationCoordinate2D?
var latitude: Double?
var longitude: Double?
guard let latitude = latitude && longitude = longitude else {
return
}
startPosition = CLLocationCoordinate2DMake(latitude, longitude)
答案 2 :(得分:1)
清楚的方式
if let latitude = latitude, longitude = longitude {
startPosition = CLLocationCoordinate2D(latitude: latitude,
longitude: longitude)
}
CLLocationCoordinate2D是一个结构,如果你使用struct初始化器,它会更好。请注意,只有一个" let"在if语句中需要。
答案 3 :(得分:-1)
如果我正确理解了这个问题,你可以说
var startPosition: CLLocationCoordinate2D?
var latitude: Double?
var longitude: Double?
if latitude != nil && longitude != nil {
startPosition = CLLocationCoordinate2DMake(latitude!, longitude!)
} else {
startPosition = nil
}