我需要将以下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!
}
}
但这是为了回归一个班级。
答案 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
}
// ...
}