Saya memiliki tipe dalam modul saya:
import Cocoa
class ColoredDotView : NSView {
...
}
Ini digunakan di sejumlah kelas yang berbeda tanpa masalah:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Tetapi untuk beberapa alasan , ketika saya menggunakannya dalam satu kelas tertentu , saya memiliki kesalahan kompilasi pada tipe:
class EditTaskPopoverController : NSObject {
@IBOutlet internal var lowPriorityDotView : ColoredDotView! // Error here
@IBOutlet internal var medPriorityDotView : ColoredDotView! // And here...
@IBOutlet internal var highPriorityDotView : ColoredDotView! // And here...
...
}
Kesalahan kompilasi adalah:
EditTaskPopoverController.swift: 15: 49: Penggunaan tipe yang tidak dideklarasikan 'ColoredDotView'
Yang saya tidak mengerti. Ini kesalahan kompilasi pertama dalam file, dan kesalahan lainnya semuanya merupakan gejala dari yang pertama. Lebih lanjut, tidak ada file lain dengan kesalahan kompilasi. Saya tidak mengerti mengapa tipe ini tidak dideklarasikan, karena file tersebut ada di modul yang sama:
Saya telah mencoba membersihkan proyek, membersihkan folder build, dan memulai ulang Xcode, tetapi tidak berhasil. Apa kesalahan langkah potensial yang dapat menyebabkan undeclared type
kesalahan kompiler di Swift?
var
deklarasi, dan mulai membangun. Lalu saya menambahkan salah satu deklarasi di atas, dan kesalahannya segera kembali: imgur.com/VUUBK2KJawaban:
Bagi saya, saya mengalami kesalahan ini ketika target pengujian saya tidak memiliki beberapa file cepat yang dimiliki target build aplikasi saya dalam mengkompilasi sumber. Itu sangat membingungkan karena 'tipe yang tidak dideklarasikan' digunakan di banyak tempat lain tanpa masalah, dan kesalahannya tampak samar. Jadi solusinya tentu saja untuk menambahkan file yang berisi 'tipe yang tidak dideklarasikan' ke target pengujian.
sumber
Ini sudah dijawab oleh @Craig Otis, tetapi masalah ini disebabkan ketika kelas yang bersangkutan tidak termasuk target yang sama, biasanya target tes tidak ada. Pastikan kotak centang berikut dicentang.
Edit
Untuk melihat target keanggotaan. Pilih file Anda lalu buka inspektur file (⌥ + ⌘ + 1) [ opsi ] + [ perintah ] + 1
sumber
Fiuh, akhirnya didiagnosis ini. Entah bagaimana , file Swift yang menyinggung
EditTaskPopoverController.swift
itu berada dalam dua fase build berbeda.Itu
Compile Sources
benar, dengan semua file Swift lainnya, tetapi juga , untuk alasan yang sangat aneh, dalamCopy Bundle Resources
fase juga, bersama dengan semua XIB dan sumber daya gambar saya.Saya tidak tahu bagaimana sampai di sana, tetapi menghapusnya dari fase build tambahan menyelesaikan masalah.
sumber
Dalam menu XCode Product-> Clean dan kemudian Product-> Build bekerja untuk saya. Saya mengalami masalah ini ketika menambahkan ViewController baru ke proyek saya di Grup / Folder baru.
sumber
Saya memiliki masalah yang sama persis. Beberapa file dalam kerangka saya tidak dapat dijangkau dari kelas lain dalam modul yang sama.
Untuk beberapa alasan file yang telah ditambahkan ke kerangka kerja di Xcode bukan bagian dari Sumber Kompilasi. Jika file Swift Anda bukan bagian dari kompilasi sumber, Anda perlu menambahkannya dengan mengetuk + dan memilihnya di sembulan.
Pastikan juga file tersebut merupakan bagian dari target framework. (Kotak kecil pada tangkapan layar di bawah ini harus diperiksa)
sumber
Penyebab saya adalah nama fungsi yang dimulai dengan karakter yang sama dengan tipe:
dan dalam implementasi saya memiliki fungsi yang dimulai dengan CustomTableView
Cara mengatasinya adalah mengubah tanda tangan fungsi sehingga tidak dimulai dengan karakter yang sama dengan tipe (CustomTableView), misalnya:
Ini adalah pesan kesalahan yang sangat menyesatkan untuk penyebab sebenarnya dalam kasus saya.
sumber
Jika ada yang mengalami masalah yang sama tetapi perbaikan Sumber Kompilasi tidak menyelesaikan masalah, me-restart Xcode mungkin (itu bekerja untuk saya). Versi Xcode saya adalah
Version 6.1 (6A1052d)
.sumber
Di aplikasi saya, saya memiliki delegasi aplikasi dan kelas lain yang perlu diakses oleh tes sebagai publik. Seperti yang diuraikan di sini , saya kemudian mengimpor aplikasi saya ke dalam pengujian saya.
Ketika saya baru-baru ini membuat dua kelas baru, target pengujian mereka adalah bagian utama dan pengujian. Menghapus mereka dari keanggotaan mereka dari tes memecahkan masalah.
sumber
Dalam kasus saya, sumber kompilasi TestTarget memiliki file dari Target Utama .
Ref :
Kenapa ini terjadi?
Ini terjadi karena kami memeriksa asosiasi TestTarget saat membuat file
Atau secara manual memeriksa opsi ini dari inspektur.
Ref :
Bagaimana saya mengatasinya?
sumber
sumber
Saya mencoba banyak solusi yang ditawarkan di sini, tetapi akhirnya menghapus file dan membuatnya lagi, dan Xcode mereda: /
sumber
Ini juga dapat terjadi jika Anda secara kebetulan menggunakan nama parameter, dan menyebutnya sama dengan objek.
sumber
Ini mungkin membantu seseorang.
Saya telah membuat proyek pengujian baru dengan Core Data yang disebut "CoreData". Singkatnya saya mendapat "Penggunaan tipe yang tidak dideklarasikan" untuk NSManagedObjectContext dan kelas Data Inti lainnya. Setelah beberapa upaya mengimpor, menambahkan ke fase Build, dll. Saya telah menghapus proyek dan memulai yang baru yang disebut "TestingCoreData" dan semuanya bekerja dengan baik.
Jangan beri nama (tes) Proyek seperti nama Kelas
sumber
Ini juga bisa terjadi jika Anda memiliki fungsi dengan nama yang sama dengan jenis objek di tanda tangan Anda. Sebagai contoh:
akan menyebabkan kompiler menjadi bingung (dan memang seharusnya begitu) karena kompiler pertama-tama akan melihat secara lokal di dalam file sebelum melihat file lain. Jadi terlihat pada "Player" di tanda tangan dan berpikir, itu bukan objek dalam lingkup ini, tetapi fungsi, jadi ada sesuatu yang salah.
Mungkin ini adalah alasan bagus mengapa saya tidak harus menggunakan fungsi kelas. :)
sumber
Saya mendapat pesan kesalahan ini di Xcode 8 saat refactoring kode ke kerangka kerja, ternyata saya lupa menyatakan kelas dalam kerangka kerja sebagai
public
sumber
Mungkin Anda telah menambahkan kelas dengan beberapa "FirstNameClass" dan setelah itu secara manual ganti nama menjadi "ColoredDotView". Cobalah untuk menyalin konten dari kelas "ColoredDotView" ke clipboard, hapus "ColoredDotView" dari proyek dan tambahkan lagi.
Id ini memperbaiki masalah yang sama dari saya.
sumber
Dalam kasus saya adalah kesalahan yang saya buat. Saya menambahkan file baru sebagai "OS X> Sumber> Cocoa Class", bukan "iOS> Source> Cocoa Touch Class".
sumber
Dalam kasus saya, ini disebabkan oleh nama subkelas yang digunakan di baris berikutnya sebagai nama variabel dengan tipe yang berbeda:
Perhatikan bahwa pada baris 1, pipGlow adalah nama subclass (dari SKShapeNode), tetapi di baris dua, saya menggunakan pipGlow sebagai nama variabel. Ini bukan hanya gaya pengkodean yang buruk, tapi juga jelas tidak-tidak! Setelah saya mengubah baris kedua menjadi:
Saya tidak lagi menerima kesalahan. Saya harap ini membantu seseorang!
sumber
Saat menguji kode Swift yang termasuk dalam aplikasi, pertama-tama pastikan target pengujian membangun aplikasi sebagai ketergantungan. Kemudian, dalam pengujian Anda, impor aplikasi sebagai modul. Sebagai contoh:
@testable import MyApplication
Ini akan membuat objek Swift yang merupakan bagian dari aplikasi tersedia untuk pengujian.
sumber
Dalam kasus saya, itu disebabkan oleh Pengodean Teks file cepat. Satu file menunjukkan 'No Encicit Encoding', dan setelah dikonversi menjadi 'UTF-8', masalah terpecahkan.
Dan alasan mengapa pengkodean teks file tidak eksplisit adalah karena saya menyalin semua kode dari file cepat lainnya.
Tidak Ada Screenshot Pengodean Eksplisit
Screenshot UTF-8
sumber
Membersihkan proyek memecahkan masalah saya.
Langkah-langkah: Produk -> Bersihkan (atau Shift + Cmd + K)
sumber
Dalam kasus saya, saya ingin menambahkan metode dengan objek swift kustom sebagai parameter tipe, dan nama yang saya berikan ke variabel dalam parameter persis sama dengan nama kelas objek kustom
Masalahnya kira-kira seperti ini:
Bagian dalam karakter tebal menyebabkan kesalahan tipe yang tidak dideklarasikan
sumber
seperti yang lainnya disebutkan dengan baik dan di utas ini
penggunaan file cepat yang tidak dibutuhkan dalam "salin bundel sumber daya"
sumber
Seperti yang lain, itu adalah beberapa kode yang tidak terkait yang menyebabkan
@testable
kegagalan fungsi.Di target pengujian saya ada file header Objective-C yang punya
@import ModuleUnderTest;
Saya menghapus baris ini (karena impor sebenarnya tidak perlu) dan secara ajaib
@testable
mulai bekerja lagi.Saya hanya dapat melacak ini tetapi menghapus semuanya dari proyek saya dan menambahkannya kembali sedikit demi sedikit sampai gagal. Akhirnya saya menemukan garis masalah kode.
sumber
jika Anda mengaksesnya dari yang berbeda
module
atauTarget
Anda hanya perlupublic
melakukannyasumber
Jika seseorang membuat kesalahan konyol yang sama saya lakukan ...
Saya mendapatkan kesalahan ini karena dalam mengganti nama file sumber saya, saya tidak sengaja menghapus file
.
dari nama file dan kompiler memperlakukan file tersebut sebagai file teks biasa dan bukan sebagai sumber untuk dikompilasi.jadi saya bermaksud untuk mengganti nama file
MyProtocol.swift
tetapi tidak sengaja menamainyaMyProtocolswift
Ini kesalahan sederhana, tetapi tidak segera jelas bahwa inilah yang sedang terjadi.
sumber
Tidak menambahkan delcarasi impor yang benar juga bisa menjadi kesalahan. Bagi saya, saya hanya dihilangkan untuk mengimpor PriorityUIKit.
sumber
Situasi saya adalah saya menyeret file baru XXView.swift ke proyek. Dan menyatakan tipe tampilan menjadi XXView maka kesalahan "penggunaan tipe yang tidak dideklarasikan ....".
Saya hanya mencoba menambahkan XXView.swift saya ke target pengujian yang memecahkan kesalahan. Tapi saya tidak ingin Kelas UI saya terlibat dalam target tes.
Akhirnya, saya menemukan ViewController saya sudah dalam target uji yang seharusnya tidak terjadi. (Saya pikir karena saya membuat VC oleh xctemplate karena itu, secara otomatis dimasukkan dalam target pengujian)
Saya menghapus view controller dari target pengujian, dan kemudian XXView saya sekarang tidak perlu ditambahkan ke target pengujian.
Kesimpulan: pastikan semua file terkait Anda juga harus menghapus centang pada target pengujian.
sumber
Setelah menghabiskan satu jam pada kesalahan ini, saya menemukan bahwa file modul digandakan. hapus file ekstra, dan geser + cmd + k untuk membersihkan dan kesalahannya hilang.
sumber
Dalam kasus saya, masalah dengan yang baru
class
tidak diakui. Saya memecahkan masalah dengan menghapus kelas dan menambahkannya kembali tetapi kali ini memeriksaWatch App Extension
opsi saat membuat kelas baru.Harap perhatikan bahwa saya memiliki Ekstensi Aplikasi Tontonan di Aplikasi saya.
sumber
Target
.