Jadi saya telah membuat aplikasi, dan semuanya bekerja dengan baik. Tetapi hari ini saya membuat kelas baru seperti biasa dan untuk beberapa alasan di kelas ini saya tidak dapat mengakses variabel Publik / Global dari kelas lain. Semua kelas lain bisa, tapi sekarang kapan pun saya mencoba membuat kelas baru, saya tidak bisa. Bagaimana ini bisa diperbaiki?
Saya menggunakan Swift dan Xcode 6.
Kelas pekerja:
import UIKit
import Foundation
import Parse
import CoreData
var signedIn = true
class ViewController: UIViewController {
Kelas Baru:
import UIKit
class NewClass: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
signedIn = false
}
Tapi terus signedIn = false
Saya mendapatkan kesalahan:
penggunaan pengenal yang belum terselesaikan "masuk"
}
di akhirviewDidLoad()
Jawaban:
Satu masalah yang mungkin adalah bahwa kelas baru Anda memiliki Target yang berbeda atau Target yang berbeda dari yang lain.
Misalnya, mungkin memiliki target pengujian sementara yang lain tidak. Untuk kasus khusus ini, Anda harus menyertakan semua kelas Anda dalam target pengujian atau tidak satupun dari mereka.
sumber
Saya pernah mengalami masalah ini setelah mengganti nama file. Saya mengganti nama file dari dalam Xcode, tetapi setelah itu Xcode tidak dapat menemukan fungsi di file tersebut. Bahkan pembangunan kembali yang bersih tidak memperbaiki masalah, tetapi menutup dan kemudian membuka kembali proyek membuat pembangunan tersebut berfungsi.
sumber
'Penggunaan Pengenal Tidak Terselesaikan' di Swift my juga terjadi ketika Anda lupa mengimpor perpustakaan. Misalnya saya mengalami kesalahan:
Di mana saya lupa
UIKit
sumber
Terkadang kompilator menjadi bingung tentang sintaks di kelas Anda. Ini sering terjadi jika Anda menempelkan sumber dari tempat lain.
Coba kurangi file sumber yang "belum terselesaikan" hingga seminimal mungkin, yaitu membersihkan dan membangun. Setelah berhasil, tambahkan semua kerumitan kembali ke kelas Anda.
Ini telah membuat saya pergi ketika memulai ulang Xcode tidak berfungsi.
sumber
Tempat lain yang pernah saya lihat kesalahan ini adalah ketika proyek Anda memiliki banyak target DAN beberapa header penghubung . Jika itu adalah kelas bersama, pastikan Anda menambahkan sumber daya ke semua header penghubung.
Tip yang bagus adalah dengan melihat di panel kiri Issue Navigator; objek root akan menunjukkan target yang mengeluarkan pengaduan.
sumber
Bagi saya kesalahan ini terjadi karena saya mencoba memanggil fungsi bersarang . Hanya hal yang harus saya lakukan untuk memilikinya tetap adalah untuk membawa fungsi keluar untuk lingkup di mana itu terlihat.
sumber
Dalam kasus saya, saya memiliki file Object-C yang juga berada dalam Keanggotaan Target yang sama. Saya perbaiki dengan menambahkan
#import "YourObjectCFileHeader.h"
file di dalamBridging-Header.h
sumber
Karena Anda belum menyatakannya. Jika Anda ingin menggunakan variabel kelas lain, Anda harus menggunakan
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { var DestViewController : ViewController = segue.destinationViewController as ViewController DestViewController.signedIn = false }
Anda harus meletakkan kode ini di akhir kode Kelas Baru
sumber
NewClass
Warisan Anda dariUIViewController
. Anda menyatakansignedIn
diViewController
. Jika Anda inginNewClass
dapat mengidentifikasi variabel itu, itu harus dideklarasikan di kelas yang AndaNewClass
warisi.sumber
Saya mendapat kesalahan ini untuk Mantle Framework di Proyek Objective-Swift saya. Yang saya coba adalah,
Beralih antara Keanggotaan Pribadi, pertama-tama buat proyek, berakhir dengan kesalahan. Kemudian membangun proyek dengan Keanggotaan Publik untuk semua kerangka kerja yang muncul untuk file Mantle.h , Anda harus sukses.
Ini hanyalah bug bangunan dengan banyak kerangka kerja dalam proyek Swift Objective-C.
sumber
Jika ini terkait dengan kelas yang Anda buat, pastikan bahwa kelas tersebut tidak bersarang.
Fe
A. cepat
class A { class ARelated { } }
panggilan
var b = ARelated()
akan memberikan 'Penggunaan pengenal yang tidak terselesaikan: ARelated'.Anda bisa:
1) pisahkan kelas jika diinginkan pada file yang sama:
A. cepat
class A { } class ARelated { }
2) Pertahankan struktur yang sama dan gunakan kelas penutup untuk sampai ke subkelas:
var b = A.ARelated
sumber
Saya melakukan kesalahan bodoh. Saya lupa menyebutkan kelas sebagai publik atau terbuka saat memperbarui kode di ruang kerja cocoapod.
Silakan periksa apakah accesor bekerja di ruang kerja yang terpisah.
sumber
Anda lupa mendeklarasikan variabel. Letakkan saja
var
di depansignedIn = false
sumber
viewDidLoad
.Masalah saya adalah memanggil program saya dengan nama yang sama dengan salah satu cocoapodnya. Ini menyebabkan konflik. Solusi: Buat program dengan nama yang berbeda.
sumber
Ini tidak langsung ke sampel kode Anda, tetapi secara umum tentang error tersebut. Saya menulisnya di sini, karena Google mengarahkan kesalahan ini ke pertanyaan ini, jadi semoga berguna untuk pengembang lain.
Kasus penggunaan lain ketika Anda dapat menerima kesalahan seperti itu adalah ketika Anda menambahkan pemilih ke metode di kelas lain, misalnya:
private class MockTextFieldTarget { private(set) var didCallDoneAction = false @objc func doneActionHandler() { didCallDoneAction = true } }
Dan kemudian di kelas lain:
final class UITextFieldTests: XCTestCase { func testDummyCode() { let mockTarget = MockTextFieldTarget() UIBarButtonItem(barButtonSystemItem: .cancel, target: mockTarget, action: MockTextFieldTarget.doneActionHandler) // ... do something ... } }
Jika di baris terakhir Anda hanya menelepon,
#selector(cancelActionHandler)
bukan#selector(MockTextFieldTarget.cancelActionHandler)
, Anda akan mendapatkannyakesalahan.
sumber