Swift:调用参数可能为零的函数

时间:2016-06-16 20:25:03

标签: ios swift

我想弄清楚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。)

4 个答案:

答案 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语句中需要。

enter image description here

答案 3 :(得分:-1)

如果我正确理解了这个问题,你可以说

var startPosition: CLLocationCoordinate2D?
var latitude: Double?
var longitude: Double?

if latitude != nil && longitude != nil {
startPosition = CLLocationCoordinate2DMake(latitude!, longitude!)
} else {
startPosition = nil
}