'Use of Unresolved Identifier' di Swift

93

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"

Apple Geek
sumber
dan ya saya telah menghapus dan membuat ulang kelas ini beberapa kali
Apple Geek
Tolong tunjukkan kode Anda, baik berfungsi maupun tidak.
Wez
Dapatkah Anda menentukan versi XCode / Swift yang Anda gunakan (apakah itu beta atau tidak)?
lchamp
@Iamp Xcode 6.1 bukan beta.
Apple Geek
1
Apakah ini kode lengkap Anda? karena lekukan Anda, sepertinya Anda kehilangan tanda kurung kurawal }di akhirviewDidLoad()
Wez

Jawaban:

296

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.

Target

lchamp
sumber
Jika kelas berada dalam target yang berbeda, pastikan Anda mengimpornya di atas file swift Anda
Medhi
2
hehe, itu masalah. Saya lupa menyiapkan target untuk kelas. Tnx :)
tBug
Ya ampun, saya menghabiskan beberapa jam untuk menyelesaikan yang satu ini. Pesan kesalahan yang bodoh. Bahkan Syntax Error lebih baik!
diuji
yup .. itu tidak ditetapkan dalam target untuk proyek uji !! terima kasih
reidisaki
1
Milik saya sudah masuk, tetapi saya hanya menghapus centang lalu memeriksa ulang, yang memperbaikinya DAN pelengkapan otomatis / intellisense saya kembali!
Stephen J
11

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.

ThomasW
sumber
Ini juga berfungsi untuk mengubah lokasi file
Logan George
Persis benar saya menghapus referensi file dan kemudian menambahkannya lagi. dan semuanya bekerja
Hamed Nova
7

'Penggunaan Pengenal Tidak Terselesaikan' di Swift my juga terjadi ketika Anda lupa mengimpor perpustakaan. Misalnya saya mengalami kesalahan: masukkan deskripsi gambar di sini

Di mana saya lupa UIKit

impor UIKit

Kontra Bulaquena
sumber
1
import AVFoundation
Jenita _Alice4Real
4

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.

minyak ular
sumber
4

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.

capikaw.dll
sumber
3

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.

Madu
sumber
Dengan "bawa fungsi ke lingkup yang terlihat", maksud Anda menandainya sebagai publik?
Barry Jones
Tidak. Hanya memindahkan / menyeret fungsi ke lingkup yang berbeda, yaitu di bawah lingkup kelas
Honey
3

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

Ribaz
sumber
1

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

Fil0tti
sumber
ya tapi saya telah menggunakan kelas lain dan mereka bekerja dengan baik tanpa itu, hanya saja saya membuat kelas baru ini.
Apple Geek
2
Ini tidak akan berhasil, dia memiliki variabel signedIn yang dideklarasikan dalam lingkup global, bukan di dalam kelasnya.
Sam
1

NewClassWarisan Anda dari UIViewController. Anda menyatakan signedIndi ViewController. Jika Anda ingin NewClassdapat mengidentifikasi variabel itu, itu harus dideklarasikan di kelas yang Anda NewClasswarisi.

M Johnson
sumber
1

Saya mendapat kesalahan ini untuk Mantle Framework di Proyek Objective-Swift saya. Yang saya coba adalah,

  1. Periksa apakah impor ada di file Bridging-Header.h
  2. Ubah Keanggotaan Target untuk Kerangka di file Mantle.h seperti yang ditunjukkan pada gambar di bawah ini.

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.

masukkan deskripsi gambar di sini

Vinod Supnekar
sumber
0

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

htafoya.dll
sumber
0

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.

abimanyu jindal
sumber
0

Anda lupa mendeklarasikan variabel. Letakkan saja vardi depansignedIn = false

Davron Jabborov
sumber
Saya akan berasumsi bahwa itu hanya salah ketik pada kode yang diposting (bersama dengan tanda kurung tutup yang hilang pada viewDidLoad.
shim
0

Masalah saya adalah memanggil program saya dengan nama yang sama dengan salah satu cocoapodnya. Ini menyebabkan konflik. Solusi: Buat program dengan nama yang berbeda.

Hola Soy Edu Feliz Navidad
sumber
0

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 mendapatkannya

penggunaan pengenal yang belum terselesaikan

kesalahan.

Vive
sumber