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”
}
na końcu twojegoviewDidLoad()
Odpowiedzi:
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.
źródło
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.
źródło
„Użycie nierozwiązanego identyfikatora” w Swift mój zdarza się również, gdy zapomniałeś zaimportować bibliotekę. Na przykład mam błąd:
W którym zapomniałem
UIKit
źródło
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.
źródło
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ę.
źródło
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.
źródło
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
źródło
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
źródło
Twoje
NewClass
dziedzictwo zUIViewController
. ZadeklarowanejsignedIn
wViewController
. Jeśli chceszNewClass
móc zidentyfikować tę zmienną, będzie ona musiała zostać zadeklarowana w klasie, z którejNewClass
dziedziczy.źródło
Otrzymałem ten błąd dla Mantle Framework w moim projekcie Objective-Swift. To, czego próbowałem, to
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.
źródło
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
źródło
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.
źródło
Zapomniałeś zadeklarować zmienną. Po prostu umieść
var
przedsignedIn = false
źródło
viewDidLoad
.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.
źródło
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)
, otrzymaszbłąd.
źródło