2017-01-16 2 views
0

Я хочу продолжить вызов следующей функции для числа «n», я напишу этот код позже. Теперь я столкнулся с проблемой.Невозможно вызвать функцию из себя после интервала

func keepHighlighting(myLbl : UILabel) 
{ 
    myLbl.text = "hi" 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{   
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for : indexPath) as! TableViewCell 

    let mySelector = #selector(self.keepHighlighting(duaLbl : cell.tempLbl)) 
    let timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: mySelector, userInfo: nil, repeats: true);  
    timer.fire() 

    return cell 
} 

Ошибка: Аргумент '#selector' не относится к '@objc' метода, свойства или инициализаторе

+0

Вы понимаете, что при каждом вызове ваш 'timer' будет создавать снова? –

+0

Вы правы, я позабочусь об этом, но столкнусь с проблемой в #selector –

+0

@shallowThought Не работает –

ответ

0

Вы имеете непонятых селекторы. self.keepHighlighting(duaLbl : cell.tempLbl) - вызов функции. Селектором является имя метода (это технически сообщение, но оно обычно разрешает вызов метода).

Вы не можете передавать параметры через селектор. Метод, который вы вызываете с таймера, должен иметь подпись void someMethod(_ timer: Timer). Для этого селектором будет #selector(someMethod). (Это компилируется до someMethod:, но вам, как правило, не придется иметь дело с этим фактом.)

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

+0

Я понимаю, что такое метод call & what is selector. Я просто хочу продолжать вызов этой функции после указанного интервала &, и эта функция принимает параметры. –

+0

Вы не можете передавать параметры с помощью селектора. Они не несут данные. Это (примерно) имена методов. Вам придется сделать это по-другому. Я рекомендую делать это внутри ячейки; то вам не нужно будет передавать параметр (поскольку ячейка может просто ссылаться на свою собственную метку). –

+0

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

0

Вы должны аннотировать метод с @objc и использовать Timer s userInfo разобрать аргументы:

@objc func keepHighlighting(timer:Timer) 
{ 
    let myLbl = timer.userInfo as! UILabel 
    myLbl.text = "hi" 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for : indexPath) as! UITableViewCell 

    let mySelector = #selector(self.keepHighlighting) 
    let timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: mySelector, userInfo: cell.tempLbl, repeats: true); 
    timer.fire() 

    return cell 
} 
Смежные вопросы