Я борюсь с хорошим шаблоном об обработке нескольких опций в моем коде и соответствующей обработке ошибок.Обработка нескольких необязательных переменных?
Хава посмотреть на следующем примере
func getCoordinates1(pLatitude: Double?, pLongitude: Double?) -> CLLocationCoordinate2D?{
var coord:CLLocationCoordinate2D?
if let latitude = pLatitude {
if let longitude = pLongitude {
coord = CLLocationCoordinate2DMake(lat, long)
}
}
return coord
}
Это выглядит хорошо, но в реальном мире, вам может понадобиться обработка ошибок и здесь я ищу хороший способ написания его без дублирования кода :
func getCoordinates2(pLatitude: Double?, pLongitude: Double?) -> CLLocationCoordinate2D? {
var coord:CLLocationCoordinate2D?
if let latitude = pLatitude {
if let longitude = pLongitude {
coord = CLLocationCoordinate2DMake(latitude, longitude)
} else {
// do something to catch the error
}
} else {
// do the same as above (duplicate code)
}
return coord
}
То, что я иногда делаю то, что я использую логическое значение, чтобы следить за ним:
func getCoordinates3(pLatitude: Double?, pLongitude: Double?) -> CLLocationCoordinate2D? {
var coord:CLLocationCoordinate2D?
var success = false
if let latitude = pLatitude {
if let longitude = pLongitude {
coord = CLLocationCoordinate2DMake(latitude, longitude)
success = true
}
}
if !success {
// do something to catch the error
}
return coord
}
Или я использую шаблон выхода рано, но я думаю, что это также ошибочная
func getCoordinates4(pLatitude: Double?, pLongitude: Double?) -> CLLocationCoordinate2D? {
if let latitude = pLatitude {
if let longitude = pLongitude {
return CLLocationCoordinate2DMake(latitude, longitude)
}
}
// do something to catch the error
return nil
}
Конечно это полосатый вниз пример только два дополнительными опциями, но при анализе JSON, намного больше каскадных-если бы необходимо. Надеюсь, идея и проблема понятны.
Это то, что вы ищете http://stackoverflow.com/questions/24118900/using-if-let-with-many-expressions? –
Да, но он будет доступен в Swift 1.2 (и в настоящее время это только бета-версия). – theguy
Просто FYI, шаблон, который вы пытаетесь избежать, называется «The Pyramid Of Doom». –