У меня проблема с классом Swift. У меня есть быстрый файл для класса UITableViewController и класса UITableViewCell. Моя проблема - это класс UITableViewCell и выходы. Этот класс имеет ошибку. Класс "HomeCell" не имеет инициализаторов , и я не понимаю эту проблему.
Спасибо за ваши ответы.
import Foundation
import UIKit
class HomeTable: UITableViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableViex: UITableView!
var items: [(String, String, String)] = [
("Test", "123", "1.jpeg"),
("Test2", "236", "2.jpeg"),
("Test3", "678", "3.jpeg")
]
override func viewDidLoad() {
super.viewDidLoad()
var nib = UINib(nibName: "HomeCell", bundle: nil)
tableView.registerNib(nib, forCellReuseIdentifier: "bookCell")
}
// Number row
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count
}
// Style Cell
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("bookCell") as UITableViewCell
// Style here
return cell
}
// Select row
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Select
}
}
// PROBLEM HERE
class HomeCell : UITableViewCell {
@IBOutlet var imgBook: UIImageView
@IBOutlet var titleBook: UILabel
@IBOutlet var pageBook: UILabel
func loadItem(#title: String, page: String, image:String) {
titleBook.text = title
pageBook.text = page
imgBook.image = UIImage(named: image)
}
}
ios
uitableview
swift
Кевин Пи
источник
источник
Ответы:
Вы должны использовать неявно развернутые необязательные параметры, чтобы Swift мог справляться с циклическими зависимостями (в этом случае parent <-> child компонентов UI) на этапе инициализации.
Прочитайте этот документ , они все это хорошо объяснят.
источник
var myBool: Bool
.Быстрое исправление - убедитесь, что все переменные, которые не инициализируются при их создании (например,
var num : Int?
vsvar num = 5
), имеют либо a,?
либо!
.Длинный ответ (рекомендуется) - читайте документ в соответствии с предложением mprivat ...
источник
?
означает, что это может быть ноль, но если это так, то нет проблем с движением вперед и бездействием.!
означает, что если после распаковки было ноль, то сбой - оба они удовлетворяют требованию инициации - сообщая компилятору: я знаю / хочу, чтобы он начинал с нуля.var
иlet
у вас просматриваете контроллер, и ищите недостающие!
s и?
sЭто из Apple Doc
Вы получаете сообщение об ошибке. Класс «HomeCell» не имеет инициализаторов, потому что ваши переменные находятся в неопределенном состоянии. Либо вы создаете инициализаторы, либо вы делаете их необязательными типами, используя! или ?
источник
Мой ответ касается ошибки в целом, а не точного кода ОП. Ни один ответ не упомянул эту заметку, поэтому я просто подумал, что добавлю ее.
Код ниже также вызовет ту же ошибку:
Другие упоминали, что либо вы создаете инициализаторы, либо вы делаете их необязательными типами, используя! или ? что правильно. Однако , если у Вас есть дополнительный член / свойства, которые необязательно должны быть изменяемым то есть
var
. Если вы сделаете это,let
он никогда не сможет выйти из своегоnil
состояния. Это плохо!Итак, правильный способ написания:
Опция 1
Или вы можете написать это как:
Option2
или по умолчанию это любое значение (в том числе
nil
и глупое)Вариант3
Если вам интересно, почему
let
(вопрекиvar
) не инициализируется,nil
то читайте здесь и здесьисточник
nil
- это очень неправильно. Установкаvar
вnil
это другая вещь.В моем случае я объявил
Bool
так:т.е. я объявил это без распаковки так, вот как я решил ( без инициализатора ) ошибку:
источник
Не конкретный ответ на ваш вопрос, но я получил эту ошибку, когда я не установил начальное значение для перечисления при объявлении его как свойства. Я назначил начальное значение перечислению, чтобы устранить эту ошибку. Размещение здесь, так как это может помочь кому-то.
источник
просто предоставьте блок инициализации для класса HomeCell
это работа в моем случае
источник