Как создать глобальное свойство (переменную) в быстром программировании? и передать значение из другого класса

У меня есть класс UITableViewCell, и эта ячейка инициализируется из другого класса, содержащего табличное представление. Я хочу передать целочисленное значение в класс ячеек из класса tableview.

В задаче c это было просто сделано путем создания глобальной переменной и передачи значений при создании экземпляра класса глобальной переменной. Мне не нужно какое-либо значение во время объявления, и эта глобальная переменная изменит значение и получит значение, когда оно будет передано другим классом.

Я не знаю, где ошибка, пожалуйста, смотрите мой код, указанный ниже:

Класс UITableViewCell: -

import UIKit

class PostHeaderCell: UITableViewCell {

var loopVariable: Int? // This is global variable that i have written

@IBOutlet weak var viewMain: UIView!
@IBOutlet weak var viewCategory: UIView!
@IBOutlet weak var mainViewHeight: NSLayoutConstraint!
@IBOutlet weak var topLayoutViewCategory: NSLayoutConstraint!
override func awakeFromNib() {
    super.awakeFromNib()
   print(loopVariable)

    viewMain.layer.cornerRadius=5.0
    viewMain.layer.borderColor = UIColor(red: 212.0/255.0, green: 217.0/255.0, blue: 221.0/255.0, alpha: 1.0).CGColor
    viewMain.layer.borderWidth=1.0
    var myVar = 50.0 as CGFloat
     for var i=0;i<loopVariable;i++
    {
        mainViewHeight.constant=mainViewHeight.constant+30
        var postCell :PostCategoryView?
        postCell = NSBundle.mainBundle().loadNibNamed("PostCategoryView", owner: self, options: nil)[0] as? PostCategoryView
        postCell!.frame=CGRectMake(10,myVar+10,postCell!.frame.size.width,50)
        print(postCell)
        myVar = myVar + 55.0;

    }
    self.layoutSubviews()
  }

    override func setSelected(selected: Bool, animated: Bool) {
      super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
  }
}

Теперь я реализовал этот класс UITableViewCell в другом классе и передал значение переменной цикла из этого класса. Пожалуйста, посмотрите приведенный ниже код для вызова и создания экземпляра PostHeaderCell-Class B: -

 var cell:PostHeaderCell! =     tableView.dequeueReusableCellWithIdentifier("PostHeaderCell",  forIndexPath: indexPath) as! PostHeaderCell
  cell.loopVariable=2
  return cell

Примечание. Я хочу инициализировать значение переменной цикла из класса B, но оно всегда дает nil (я передал 2 в качестве значения для loopVariable).


person Anuj Kumar Rai    schedule 06.05.2015    source источник
comment
Просто переместите var loopVariable: Int? на высший уровень   -  person Leo Dabus    schedule 06.05.2015
comment
Леонардо, я думаю, что это на верхнем уровне, если я его перемещаю, то получаю ошибку компилятора PostHeaderCell не имеет переменной-члена loopVariable   -  person Anuj Kumar Rai    schedule 06.05.2015


Ответы (1)


Что вам нужно, так это переменная класса, объявите ее с помощью static. Вот упрощенный пример:

class Foo {
  static var counter : Int = 0

  init () {
    Foo.counter++
  }
}

В этом примере каждый раз, когда вы создаете новый Foo, счетчик увеличивается. Как таковой:

  9> Foo()
$R0: Foo = {}
 10> Foo.counter
$R1: Int = 1
 11> Foo()
$R2: Foo = {}
 12> Foo.counter
$R3: Int = 2

Но приращение — это всего лишь пример того, как значение счетчика относится к классу, а не к экземпляру.

В вашем случае вы можете назначить counter с помощью

Foo.counter = 10

и вы можете использовать его в других функциях:

class Foo { 
  // ...

  func awakeFromNib () {
    for var i = 0; i < Foo.counter; i++ {
      // ...
    }
  }
}
person GoZoner    schedule 06.05.2015