Используя ограниченные универсальные дополнительные методы в отдельном блоке дает ссылочную ошибку

Добавьте переменную UISearchController

var searchController : UISearchController!

и amp; затем добавьте код в viewDidLoad

    searchController = UISearchController(searchResultsController: nil)
    searchController.delegate = self
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false // displays tableview

    let scb = self.searchController.searchBar
    scb.tintColor = UIColor.white
    scb.placeholder = "SEARCH"
    scb.barTintColor = UIColor.white

    if let textfield = scb.value(forKey: "searchField") as? UITextField {
        textfield.textColor = UIColor.greenColor
        if let backgroundview = textfield.subviews.first {
            backgroundview.backgroundColor = UIColor.white
            backgroundview.layer.cornerRadius = 10
            backgroundview.clipsToBounds = true
        }
    }

    if #available(iOS 11.0, *) {
        navigationItem.searchController = searchController
        navigationItem.hidesSearchBarWhenScrolling = false
    } else {
        self.tableView.tableHeaderView = searchController.searchBar
        searchController.searchBar.tintColor = UIColor.greenColor
        searchController.searchBar.barTintColor = UIColor.greenColor
    }
    definesPresentationContext = true
5
задан Yona 18 December 2008 в 13:28
поделиться

2 ответа

ну да! Для компиляции это должно смочь разрешить все в общедоступном/защищать API. Иначе это не может осуществить ограничение. Я предполагаю, что это должно распознать, что типы видят, является ли дополнительный метод кандидатом на метод.

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

Для выполнения это должно было бы также смочь разрешить что-либо используемое внутренне, но не выставленное в API. Это - стандартное поведение.

5
ответ дан 14 December 2019 в 13:50
поделиться

@Marc дает Вам почему. Я предложил бы, чтобы как хорошая практика Вы вспыхнули что-либо, что относится к веб-классам в еще один блок, скажите Com. Компания. Расширения. Сеть в дополнение к Com. Компания. Расширения. Затем можно включать и в веб-проекты и только в невеб-расширения в других проектах.

1
ответ дан 14 December 2019 в 13:50
поделиться