Рассмотрим следующую функцию поиска, которую я написал, которая использует опции и необязательную привязку, сообщает сообщение, если ключ не найден в словаре
func lookUp<T:Equatable>(key:T , dictionary:[T:T]) -> T? {
for i in dictionary.keys {
if i == key{
return dictionary[i]
}
}
return nil
}
let dict = ["JO":"Jordan",
"UAE":"United Arab Emirates",
"USA":"United States Of America"
]
if let a = lookUp( "JO",dictionary:dict ) {
print(a) // prints Jordan
} else {
print("cant find value")
}
Я переписал следующий код, но на этот раз, используя обработку ошибок, инструкцию охраны, удалив -> T?
и записывая перечисление, которое соответствует ErrorType
:
enum lookUpErrors : ErrorType {
case noSuchKeyInDictionary
}
func lookUpThrows<T:Equatable>(key:T , dic:[T:T])throws {
for i in dic.keys{
guard i == key else {
throw lookUpErrors.noSuchKeyInDictionary
}
print(dic[i]!)
}
}
do {
try lookUpThrows("UAE" , dic:dict) // prints united arab emirates
}
catch lookUpErrors.noSuchKeyInDictionary{
print("cant find value")
}
Обе функции работают хорошо, но:
-
эта функция обеспечивает лучшую производительность
-
какая функция "безопаснее"
-
какая функция рекомендуется (на основе плюсов и минусов)