Saya punya masalah dengan kelas Swift. Saya memiliki file cepat untuk kelas UITableViewController dan kelas UITableViewCell. Masalah saya adalah kelas UITableViewCell, dan outlet. Kelas ini memiliki kesalahan Kelas "HomeCell" tidak memiliki inisialisasi , dan saya tidak mengerti masalah ini.
Terima kasih atas tanggapan Anda.
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
Kevin Py
sumber
sumber
Jawaban:
Anda harus menggunakan opsional yang tidak dibungkus secara implisit sehingga Swift dapat mengatasi dependensi melingkar (induk <-> anak komponen UI dalam kasus ini) selama fase inisialisasi.
Baca dokumen ini , mereka menjelaskan semuanya dengan baik.
sumber
var myBool: Bool
.Perbaikan cepat - pastikan semua variabel yang tidak mendapatkan inisialisasi ketika mereka dibuat (misalnya
var num : Int?
vsvar num = 5
) memiliki salah satu?
atau!
.Jawaban panjang ( disarankan ) - baca dokumen sesuai saran mprivat ...
sumber
?
berarti mungkin nihil, tetapi jika sudah ada maka tidak ada masalah dengan bergerak maju dan tidak melakukan apa pun.!
berarti jika setelah membuka bungkusnya nol, maka macet — keduanya memenuhi persyaratan inisiasi — oleh Anda memberi tahu kompilator: Saya tahu / ingin bahwa itu akan mulai dari nol.var
danlet
di dalam kamu lihat controller, dan cari yang hilang!
dan?
sIni dari Apple doc
Anda mendapatkan pesan kesalahan Kelas "HomeCell" tidak memiliki inisialisasi karena variabel Anda dalam keadaan tak tentu. Entah Anda membuat inisialisasi atau menjadikannya tipe opsional, gunakan! atau ?
sumber
Jawaban saya mengatasi kesalahan secara umum dan bukan kode persis OP. Tidak ada jawaban yang menyebutkan catatan ini, jadi saya pikir saya menambahkannya.
Kode di bawah ini juga akan menghasilkan kesalahan yang sama :
Yang lain menyebutkan bahwa Anda membuat inisialisasi atau menjadikannya tipe opsional, menggunakan! atau ? yang mana yang benar. Namun jika Anda memiliki anggota / properti opsional, opsional itu harus dapat diubah yaitu
var
. Jika Anda membuatlet
maka itu tidak akan pernah bisa keluar darinil
kondisinya. Itu buruk!Jadi cara penulisan yang benar adalah:
Pilihan 1
Atau Anda dapat menuliskannya sebagai:
Pilihan 2
atau default ke nilai apa pun (termasuk
nil
yang agak bodoh)Opsi3
Jika Anda ingin tahu mengapa
let
(bertentangan denganvar
) tidak diinisialisasi untuknil
kemudian baca di sini dan di sinisumber
nil
sangat salah. Mengaturvar
tonil
adalah hal yang berbeda.Dalam kasus saya, saya telah menyatakan
Bool
seperti ini:yaitu saya menyatakan tanpa membukanya, Ini adalah bagaimana saya memecahkan kesalahan ( tidak ada initializer ):
sumber
Bukan jawaban spesifik untuk pertanyaan Anda tetapi saya mendapatkan kesalahan ini ketika saya belum menetapkan nilai awal untuk enum saat mendeklarasikannya sebagai properti. Saya menetapkan nilai awal ke enum untuk menyelesaikan kesalahan ini. Posting di sini karena mungkin membantu seseorang.
sumber
cukup sediakan blok init untuk kelas HomeCell
ini berfungsi dalam kasus saya
sumber