Лучший быстрый способ написать словарь строки в страну - PullRequest
0 голосов
/ 23 марта 2019

Я хочу, чтобы мой класс Swift FinderForCountry нашел страну с указанным именем.

Код должен также помнить все страны (по имени), которые уже были найдены.

Мой существующий Swiftкласс имеет переменную [String: Country] и метод findCountry (), который принимает и строку, и функцию, которая принимает страну.

public
class FinderForCountry {
    private
    var mapOfStringToCountry = [String: Country]()

    public
    func findCountry(from string: String, _ functionThatTakesCountry: @escaping (Country) -> Void) {
        if let country = mapOfStringToCountry[string] {
            functionThatTakesCountry(country)
        } else {
            DispatchQueue.main.async {
                let country = Country(string)
                self.mapOfStringToCountry[string] = country
                functionThatTakesCountry(country)
            }
        }
    }
}

Это лучший способ написания кода илиесть лучший способ?Например:

public
class FinderForCountry {
    private
    var mapOfStringToCountry = [String: Country]()

    public
    func findCountry(from string: String, _ functionThatTakesCountry: @escaping (Country) -> Void) {
        DispatchQueue.main.async {
            if let country = self.mapOfStringToCountry[string] {
                functionThatTakesCountry(country)
            } else {
                let country = Country(string)
                self.mapOfStringToCountry[string] = country
                functionThatTakesCountry(country)
            }
        }
    }
}

Большое спасибо.

1 Ответ

1 голос
/ 23 марта 2019

Да, действительно есть лучший способ.

Экранирующий обработчик завершения и отправка кода в основной поток не имеют смысла, поскольку нет ничего, что выполняется асинхронно.

Просто return страна.

public class FinderForCountry {

    private var mapOfStringToCountry = [String: Country]()

    public func findCountry(from string: String) -> Country 
    {
        if let country = self.mapOfStringToCountry[string] {
            return country
        } else {
            let country = Country(string)
            self.mapOfStringToCountry[string] = country
            return country
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...