Встраивание свойств Inline не работает для общих подклассов UICollectionViewCell

Если я определяю подкласс UICollectionViewCell:

class TestCell<T>: UICollectionViewCell {
  var float: CGFloat? = 3
  var string = "abc"
}

Зарегистрировать его:

collectionView.registerClass(TestCell<String>.self, forCellWithReuseIdentifier: "Test")

Затем используйте его:

collectionView.dequeueReusableCellWithReuseIdentifier("Test", forIndexPath: indexPath) as! TestCell<String>

Я замечаю странное поведение со свойствами, которые должны были быть инициализированы.

  • float == Необязательный (0.0)
  • string == ""

Почему это происходит и как я могу это исправить?

Это на Xcode 7.3

Ответ 1

Похоже, что это была ошибка, связанная с дженериками.

Если вы избавитесь от спецификатора generic, переменные инициализируются, как вы ожидаете.

Если вам нужен спецификатор generic, вы можете обойти проблему, создав свойства в методе init, а не inline:

class TestCell<T>: UICollectionViewCell {
  override init(frame: CGRect) {
    float = 3
    string = "abc"
    super.init(frame: frame)
  }

  var float: CGFloat?
  var string: String
}