„Użycie nierozwiązanego identyfikatora” w języku Swift

93

Tak więc tworzyłem aplikację i wszystko działa świetnie. Ale dzisiaj utworzyłem nową klasę jak zwykle iz jakiegoś powodu w tej klasie nie mogę uzyskać dostępu do zmiennej Public / Global z innych klas. Wszystkie inne zajęcia mogą, ale teraz, kiedy próbuję stworzyć nową klasę, nie mogę. Jak można to naprawić?

Używam Swift i Xcode 6.

Klasa pracująca:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

Nowa klasa:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

Ale dalej signedIn = false

Wyskakuje mi błąd:

użycie nierozwiązanego identyfikatora „signedIn”

Apple Geek
źródło
i tak, kilkakrotnie usuwałem i odtwarzałem tę klasę
Apple Geek
Pokaż swój kod, działający i niedziałający.
Wez
Czy możesz określić wersję XCode / Swift, której używasz (czy jest to wersja beta, czy nie)?
lchamp
@Ichamp Xcode 6.1 nie beta.
Apple Geek
1
Czy to twój pełny kod? ze względu na wcięcie wygląda na to, że brakuje nawiasu klamrowego }na końcu twojegoviewDidLoad()
Wez

Odpowiedzi:

296

Jednym z możliwych problemów jest to, że Twoja nowa klasa ma inny Cel lub inny Cel niż poprzedni.

Na przykład może mieć cel testowy, a drugi nie. W tym konkretnym przypadku musisz uwzględnić wszystkie swoje klasy w celu testowania lub żadną z nich.

Cele

lchamp
źródło
Jeśli klasa jest w innym miejscu docelowym, pamiętaj, aby zaimportować ją na górze pliku Swift
Medhi
2
hehe, to był problem. Zapomniałem ustawić cel dla klasy. Tnx :)
tBug
O rany, spędziłem kilka godzin, aby rozwiązać ten problem. Taki głupi komunikat o błędzie. Nawet błąd składni jest lepszy!
test turinga
tak .. to nie było ustawione w celu dla projektu testowego !! dziękuję
reidisaki
1
Mój był dostępny, ale po prostu odznaczyłem, a następnie sprawdziłem ponownie, co naprawiło ten problem i wróciło moje autouzupełnianie / inteligencja!
Stephen J
11

Kiedyś miałem ten problem po zmianie nazwy pliku. Zmieniłem nazwę pliku z poziomu Xcode, ale później Xcode nie mógł znaleźć funkcji w pliku. Nawet czysta przebudowa nie rozwiązała problemu, ale zamknięcie i ponowne otwarcie projektu sprawiło, że kompilacja działała.

Thomas W.
źródło
Działa to również w przypadku zmiany lokalizacji pliku
Logan George
dokładnie tak, usunąłem odniesienia do plików, a następnie dodałem je ponownie. i wszystko działało
Hamed Nova
7

„Użycie nierozwiązanego identyfikatora” w Swift mój zdarza się również, gdy zapomniałeś zaimportować bibliotekę. Na przykład mam błąd: wprowadź opis obrazu tutaj

W którym zapomniałem UIKit

import UIKit

Wady Bulaquena
źródło
1
import AVFoundation
Jenita _Alice4Real
4

Czasami kompilator jest zdezorientowany co do składni w Twojej klasie. Dzieje się tak często, jeśli wkleisz źródło z innego miejsca.

Spróbuj zredukować „nierozwiązany” plik źródłowy do absolutnego minimum, wyczyść i skompiluj. Po pomyślnym zbudowaniu dodaj całą złożoność z powrotem do swojej klasy.

To sprawiło, że zniknęło, gdy ponowne uruchomienie Xcode nie działało.

wąż
źródło
4

Innym miejscem, w którym widziałem ten błąd, jest sytuacja, gdy projekt ma wiele celów ORAZ wiele nagłówków mostkujących . Jeśli jest to klasa udostępniona, upewnij się, że dodajesz zasób do wszystkich nagłówków mostkujących.

Dobra wskazówka to zajrzeć do lewego panelu nawigatora problemów; obiekt główny pokaże cel, który zgłasza skargę.

capikaw
źródło
3

U mnie ten błąd wystąpił, ponieważ próbowałem wywołać zagnieżdżoną funkcję. Jedyne, co musiałem zrobić, aby to naprawić było doprowadzenie funkcję out do zakresu, gdzie było widoczne.

kochanie
źródło
Czy przez „wyprowadzenie funkcji do zakresu, w którym była widoczna”, masz na myśli oznaczenie jej jako publicznej?
Barry Jones
Nie. Po prostu przenoszenie / przeciąganie funkcji do innego zakresu, czyli w ramach klasy
Honey
3

W moim przypadku miałem plik Object-C, który również znajdował się w tym samym członkostwie docelowym. Naprawiłem, dodając #import "YourObjectCFileHeader.h"plik wewnętrznyBridging-Header.h

Ribaz
źródło
1

Ponieważ tego nie zadeklarowałeś. Jeśli chcesz użyć zmiennej innej klasy, musisz użyć

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var DestViewController : ViewController = segue.destinationViewController as ViewController
    DestViewController.signedIn = false
}

Musisz umieścić ten kod na końcu kodu NewClass

Fil0tti
źródło
tak, ale korzystałem z innych klas i bez tego działały dobrze, właśnie wtedy tworzę nową klasę.
Apple Geek
2
To nie zadziała, ma zmienną signedIn zadeklarowaną w zasięgu globalnym, a nie w swojej klasie.
Sam
1

Twoje NewClassdziedzictwo z UIViewController. Zadeklarowanej signedInw ViewController. Jeśli chcesz NewClassmóc zidentyfikować tę zmienną, będzie ona musiała zostać zadeklarowana w klasie, z której NewClassdziedziczy.

M Johnson
źródło
1

Otrzymałem ten błąd dla Mantle Framework w moim projekcie Objective-Swift. To, czego próbowałem, to

  1. Sprawdź, czy import znajduje się w pliku Bridging-Header.h
  2. Zmień docelowe członkostwo dla Framework w pliku Mantle.h , jak pokazano na poniższym zrzucie ekranu.

Przełączaj się między członkostwem prywatnym, najpierw skompiluj projekt, zakończ z błędami. Następnie zbuduj projekt z członkostwem publicznym dla wszystkich frameworków, które pojawiły się dla Mantle.h pliku , musisz odnieść sukces.

To tylko błąd związany z budowaniem z wieloma frameworkami w projekcie Objective-C Swift.

wprowadź opis obrazu tutaj

Vinod Supnekar
źródło
0

Jeśli dotyczy to utworzonej przez Ciebie klasy, upewnij się, że nie jest ona zagnieżdżona.

Fe

A. szybki

class A {

   class ARelated {

   }
}

powołanie var b = ARelated() da „Use of nierozwiązany identyfikator: ARelated”.

Możesz albo:

1) oddzielić klasy, jeśli zachodzi taka potrzeba, w tym samym pliku:

A. szybki

class A {

}

class ARelated {

}

2) Zachowaj tę samą strukturę i użyj otaczającej klasy, aby dostać się do podklasy:

var b = A.ARelated

htafoya
źródło
0

Zrobiłem głupi błąd. Zapomniałem wspomnieć o klasie jako publicznej lub otwartej podczas aktualizacji kodu w obszarze roboczym cocoapod.

Sprawdź, czy akcesorium, jeśli pracujesz w oddzielnym obszarze roboczym.

abhimanyu jindal
źródło
0

Zapomniałeś zadeklarować zmienną. Po prostu umieść varprzedsignedIn = false

Davron Jabborov
źródło
Przypuszczam, że to tylko literówka w przesłanym kodzie (wraz z brakującym nawiasem zamykającym na viewDidLoad.
shim
0

Mój problem polegał na nadaniu mojego programu tej samej nazwie, co jeden z jego kokonapodów. To spowodowało konflikt. Rozwiązanie: utwórz program o innej nazwie.

Hola Soy Edu Feliz Navidad
źródło
0

To nie jest bezpośrednio do twojego przykładu kodu, ale ogólnie o błędzie. Piszę to tutaj, ponieważ Google kieruje ten błąd na to pytanie, więc może się przydać innym deweloperom.


Innym przypadkiem użycia, w którym możesz otrzymać taki błąd, jest dodanie selektora do metody w innej klasie, np .:

private class MockTextFieldTarget {
private(set) var didCallDoneAction = false
    @objc func doneActionHandler() {
        didCallDoneAction = true
    }
}

A potem w innej klasie:

final class UITextFieldTests: XCTestCase {
    func testDummyCode() {
        let mockTarget = MockTextFieldTarget()
        UIBarButtonItem(barButtonSystemItem: .cancel, target: mockTarget, action: MockTextFieldTarget.doneActionHandler)
        // ... do something ...
    }
}

Jeśli w ostatniej linii po prostu zadzwonisz #selector(cancelActionHandler)zamiast #selector(MockTextFieldTarget.cancelActionHandler), otrzymasz

użycie nierozwiązanego identyfikatora

błąd.

Vive
źródło