swift中的dispatch_once singleton

时间:2014-12-15 14:46:09

标签: ios swift singleton grand-central-dispatch

我需要将以下Objective-C代码转换为Swift。

static RWBasicCell *sizingCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
  sizingCell = [self.tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
});

我该怎么做?我用Google搜索并找到了这个例子。

class SingletonC {

    class var sharedInstance : SingletonC {
        struct Static {
            static var onceToken : dispatch_once_t = 0
            static var instance : SingletonC? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = SingletonC()
        }
        return Static.instance!
    }
}

但这是为了回归一个班级。

1 个答案:

答案 0 :(得分:8)

这是this Ray Wenderlich tutorial,对吧? Swift不具有可以作用于函数的静态变量,但是可以在函数内嵌套类型,并为其提供静态变量。这是该方法开头的Swift等效版本:

func heightForBasicCellAtIndexPath(indexPath: NSIndexPath) -> CGFloat {
    struct Static {
        static var sizingCell: RWBasicCell?
    }

    if Static.sizingCell == nil {
        Static.sizingCell = tableView.dequeueReusableCellWithIdentifier(RWBasicCellIdentifier) as RWBasicCell
    }

    // ...
}