Устаревший код из 2015 года


#1

Здравствуйте!

Приобрёл книгу, которая по идее должна была помочь в освоении языка Swift, но меня она загнала в тупик. Оказалось, что написана она была ещё аж в 2015 году, когда Swift был не четвертой версии и слегка отличался от нынешнего. Так вот, в книге при объяснении темы “Реализация контроллера” из главы “Введение в табличные представления (Table View)” есть такой код, который нужно вписать в проект:

class ViewController: UIViewController, UITableViewDataSource {
    
    let sectionsTableIdentifier = "SectionsTableIdentifier"
    var names: [String: [String]]!
    var keys: [String]!
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: sectionsTableIdentifier)
        let path = Bundle.main.path(forResource: "sortednames", ofType: "plist")
        let namesDict = NSDictionary(contentsOfFile: path!)
        names = namesDict as! [String : [String]]
        keys = sorted(namesDict!.allKeys as [String])
    }

В последней строчке выскакивает предупреждение “Use of unresolved identifier ‘sorted’”.

Уже второй час ломаю голову в попытках понять, что делать. Сам я новичок в свифте. В интернете нигде ответа нет, помогите, пожалуйста.


#2

Да, Свифт несколько поменялся с тех пор, но не все так страшно, как может показаться на первый взгляд. Сейчас метод sorted() работает немного иначе и его сразу нужно применять к коллекции.

просто измените

keys = sorted(namesDict!.allKeys as [String])

на

keys = (namesDict?.allKeys as [String]).sorted()


#3

Огромное спасибо за ответ!

Не знаю почему, но я уже пытался так сделать и у меня выходили ошибки одна за другой.
Сейчас же только вышла поправка, что нужно заменить as на as!.
Очень странно, но главное, что предупреждения ушли.

Ещё раз благодарю!


#4

тогда лучше записать

    guard let namesDictionaryKeys = namesDict?.allKeys as? [String] else { return }
    keys = namesDictionaryKeys.sorted()