Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将.scheduledTimer的变量返回到Swift 3中的TableView单元格_Ios_Swift_Uitableview_Swift3 - Fatal编程技术网

Ios 将.scheduledTimer的变量返回到Swift 3中的TableView单元格

Ios 将.scheduledTimer的变量返回到Swift 3中的TableView单元格,ios,swift,uitableview,swift3,Ios,Swift,Uitableview,Swift3,我有一个tableView,在调用tableView:didSelectRowAtIndexPath时,每个单元格中都有一个计时器。我试图在自定义单元格(CustomCell)中使用标签(cellName)来显示计时器递增。我正在使用.scheduledTimer中的#selector调用一个名为getTimer()的单独函数来增加值。代码如下所示 我将此代码缩写为仅显示相关信息 两件事: Mytime变量是在类级别定义的,因此getTimer()可以在每次.scheduledTimer刷新时增

我有一个
tableView
,在调用
tableView:didSelectRowAtIndexPath
时,每个单元格中都有一个计时器。我试图在自定义单元格(
CustomCell
)中使用标签(
cellName
)来显示计时器递增。我正在使用
.scheduledTimer
中的
#selector
调用一个名为getTimer()的单独函数来增加值。代码如下所示

我将此代码缩写为仅显示相关信息

两件事:

  • My
    time
    变量是在类级别定义的,因此
    getTimer()
    可以在每次
    .scheduledTimer
    刷新时增加该变量。我想在
    :didSelectRowAtIndexPath
    中定义它,以便一次运行多个计时器。有没有一种方法可以在
    中定义它:didselectRowatingIndexPath
    ,或者通过从
    getTimer()返回增量来获得结果

  • 目前,我正在使用从
    getTimer
    返回的字符串更新我的
    cellName
    。这是静态的,目前正在考虑在.scheduledTimer刷新时刷新它的方法。我是否应该将
    indexPath.row
    传递给
    getTimer
    并在
    getTimer()
    函数本身中更新它


  • 你对这个问题的逻辑是不对的。我会给你一个快速解决问题的办法。在类范围中创建两个变量
    timeArray
    timeraray

    var timeArray = [Int]()
    var timerArray = [Timer]()
    
    将此代码放入您的
    viewDidLoad
    。创建阵列时,将计数1替换为tableview中的单元格数

        timeArray = Array(repeating: 0, count: 1)
        let timer = Timer(timeInterval: 1, target: self, selector: #selector(self.timerFired(_:)), userInfo: nil, repeats: true)
        timerArray = Array(repeating: timer, count: 1)
    
    didSelectRow
    tableview委托方法中,处理计时器验证和失效

        if timerArray[indexPath.row].isValid{
            timerArray[indexPath.row].invalidate()
        }
        else{
            timerArray[indexPath.row] = Timer(timeInterval: 1, target: self, selector: #selector(self.timerFired(_:)), userInfo: indexPath.row, repeats: true)
            timerArray[indexPath.row].fire()
        }
    
    添加此函数,该函数将在计时器启动时触发

    func timerFired(_ timer:Timer){
        if let index = timer.userInfo as? Int{
            timeArray[index] += 1
        }
    }
    
    最后,在tableview的
    cellForRow
    datasource方法中设置标签文本

    cell.cellName.text = time[indexPath.row]
    

    timerFired
    函数启动时,不要忘记重新加载特定单元格。

    此语法永远不会起作用。无法从目标/操作方法返回值。一个解决方案是创建一个自定义的表视图单元格类,并将计时器放在其中。是的,你可能是对的-我一直知道我是在用这种方式抓住救命稻草。自定义单元格类中的实现应该可以正常工作。我将在这里创建一个答案,一旦我为子孙后代解决了这个问题。谢谢。编辑您的问题并添加实际代码。我得到错误
    Type'(unsafemeutablepointer!)->time\u t'没有下标成员
    。。。
    cell.cellName.text = time[indexPath.row]