Saya mencoba menghapus baris dari Sumber Data saya dan baris kode berikut:
if let tv = tableView {
menyebabkan kesalahan berikut:
Penginisialisasi untuk pengikatan bersyarat harus memiliki tipe Opsional, bukan UITableView
Ini kode lengkapnya:
// Override to support editing the table view.
func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
// Delete the row from the data source
if let tv = tableView {
myData.removeAtIndex(indexPath.row)
tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
Bagaimana saya harus memperbaiki yang berikut ini?
if let tv = tableView {
ios
swift
optional-binding
Del Hinds
sumber
sumber
tableView
bukan nilai opsional, tidak perlu memeriksa apakah nilainya nihil atau tidak. Jadi Anda bisa langsung menggunakannya, maksud saya hapus ituif let
dan cukup gunakantableView
dalam fungsinyavariable with getter/setter cannot have an initial value
, yang diselesaikan hanya dengan menghapus blok {} sisa setelah inisialisasi, melalui jawaban ini: stackoverflow.com/a/36002958/4544328Jawaban:
if let
/if var
penjilidan opsional hanya berfungsi jika hasil dari sisi kanan ekspresi adalah opsional. Jika hasil dari sisi kanan bukan merupakan opsional, Anda tidak dapat menggunakan penjilidan opsional ini. Inti dari pengikatan opsional ini adalah untuk memeriksanil
dan hanya menggunakan variabel jika bukan-nil
.Dalam kasus Anda,
tableView
parameter dideklarasikan sebagai tipe non-opsionalUITableView
. Dijamin tidak akan pernahnil
. Jadi pengikatan opsional di sini tidak diperlukan.Yang harus kita lakukan adalah menyingkirkan
if let
dan mengubah kejadian apa puntv
di dalamnya menjadi adiltableView
.sumber
untuk masalah khusus saya, saya harus mengganti
Dengan
sumber
Dalam kasus di mana Anda menggunakan tipe sel kustom, misalnya ArticleCell, Anda mungkin mendapatkan kesalahan yang mengatakan:
Anda akan mendapatkan kesalahan ini jika baris kode Anda terlihat seperti ini:
Anda dapat memperbaiki kesalahan ini dengan melakukan hal berikut:
Jika Anda memeriksa hal di atas, Anda akan melihat bahwa yang terakhir menggunakan casting opsional untuk sel tipe ArticleCell.
sumber
as! ArticleCell?
Hal yang sama berlaku untuk pernyataan penjaga . Pesan kesalahan yang sama membawa saya ke posting dan jawaban ini (terima kasih @nhgrif).
Kode: Cetak nama belakang orang tersebut hanya jika nama tengahnya kurang dari empat karakter.
Sampai saya menyatakan terakhir sebagai parameter opsional, saya melihat kesalahan yang sama.
sumber
pengikatan kondisi harus memiliki tipe optinal yang berarti bahwa Anda hanya dapat mengikat nilai opsional dalam pernyataan if let
Ini akan bekerja dengan baik tetapi pastikan ketika Anda menggunakan jika membiarkannya harus memiliki tipe optinal "?"
sumber
Yah, akan tetap nyaman (secara sintaksis) jika kita bisa mendeklarasikan nilai biasa di dalam kondisi if. Jadi, inilah triknya: Anda dapat membuat kompiler berpikir ada penugasan
Optional.some(T)
ke nilai seperti ini:sumber