2014-12-15 4 views
0

Мне нужно преобразовать следующий код Objective-C в Swift.dispatch_once singleton in Swift

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

Как это сделать? Я разобрался и узнал этот пример.

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

Другие вопросы по этой теме было связано с общими одноэлементных экземплярами класса, в то время как речь идет о статической переменной в пределах функции. Инициализация в этом случае отличается от всегда доступного синглтона, поэтому другой вопрос кажется полезным. –

ответ

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 
    } 

    // ... 
} 
+0

Да! Я делаю этот учебник в Swift. Спасибо. Оно работает :) – Isuru