Когда конструкторов вызывают?

Во-первых, вам нужен выход для представления таблицы, поскольку вы не используете UITableViewController

@IBOutlet weak var tableView: UITableView!

, а затем внутри viewDidLoad задаете его делегата и источник данных в качестве контроллера представления

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate {

    @IBOutlet weak var tableView: UITableView!
    ...
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        tableView.delegate = self
        tableView.dataSource = self
    }
    ...
}

Вы можете иметь два массива. Один для всех пользователей и один для отфильтрованных пользователей по вашему состоянию (активно или нет)

var users = [User]()
var filteredUsers: [User] = users /* or just some other default value, e.g empty array */

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

@IBAction func ActionShowActiveUsers(_ sender: Any) {
    filteredUsers = users.filter { [113].active }
    tableView.reloadData()
}

@IBAction func btnShowInActiveUser(_ sender: Any) {
    filteredUsers = users.filter { ![113].active }
    tableView.reloadData()
}

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return filteredUsers.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell =  UITableViewCell()
    cell.textLabel?.text = "this cell index for \(filteredUsers[indexPath.row].username)"
    return cell
}
5
задан Tim Matthews 17 January 2009 в 00:10
поделиться

3 ответа

Если я определяю экземпляр локальной переменной класса на полпути вниз моя функция, не используя указатель и новый, конструктор становится обращенным ввод функции или где это определяется?

Такие переменные имеют локальный объем. Их конструктора вызывают, когда они определяются. Для локальных помех конструктора только вызывают однажды, так как помехи переживут несколько вызовов функции и возвратов. Порядок важен, и является порядком определения:

void foo() {
    ....
    if(cond) {
        ...
        // called here: first for f, then for b
        static Foo f;
        static Bar b;
    }

    ...
    Foo f; // not static: called here, in every invocation of foo.
}

Если я определяю другой экземпляр класса глобально в файле, что конструктор становится вызванным, когда исполняемый файл сначала загружается?

Да, такая переменная, как говорят, имеет статическую продолжительность хранения и объем пространства имен. Его конструктора вызывают в программе, запускаются. Порядок является порядком, он определяется в файле. Таким образом, переменная определила, позже будет иметь ее ctor названным позже. Порядок, в которых переменных, определенных в различных единицах перевода, не определяется (наблюдение за статическим фиаско порядка инициализации). Но их все называют в программе, запускаются.

Что, если несколько потоков получают доступ к .dll?

Все ставки выключены. Переменная только создается однажды. После этого, когда Вы запускаете потоки и получаете доступ к нему, переменная должна быть ориентирована на многопотоковое исполнение, или потоки должен сделать надлежащую блокировку при доступе к переменной.

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

Если я определяю экземпляр локальной переменной класса на полпути вниз моя функция, не используя указатель и новый, конструктор получает названный o ввод функции или где это определяется?

Когда это определяется.

Если я определяю другой экземпляр класса глобально в файле, что конструктор становится вызванным, когда исполняемый файл сначала загружается?

Да.

Что, если несколько потоков получают доступ к .dll?

DLLs обычно только загружается однажды для целого приложения – на самом деле, DLLs также имеют точку входа, которую называют потоки Вашего приложения, но инициализация глобальной переменной происходит перед этим и только однажды.

8
ответ дан 14 December 2019 в 01:19
поделиться

Для .dlls это зависит от компилятора и времени выполнения C (CRT). Для MSVC, выпущенного с Visual Studio 2008 SP1, CRT .dll инициализирует глобальные объекты в DLL_PROCESS_ATTACH время и уничтожает их в DLL_PROCESS_DETACH время, предполагая, что ничего ужасного не произошло во время DLL_PROCESS_ATTACH.

0
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: