programing

Swift의 '해결되지 않은 식별자 사용'

yellowcard 2023. 10. 7. 09:46
반응형

Swift의 '해결되지 않은 식별자 사용'

그래서 저는 앱을 만들고 있었고, 모든 것이 잘 작동하고 있었습니다.하지만 오늘은 평소와 같이 새로운 수업을 만들었고 어떤 이유에서인지 다른 수업의 Public/Global 변수에 접근할 수 없습니다.다른 수업은 다 가능하지만, 지금은 새로운 수업을 하려고 할 때마다 그럴 수가 없어요.이것은 어떻게 고쳐질까요?

저는 스위프트와 Xcode 6를 사용하고 있습니다.

작업반:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

새 클래스:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

에.signedIn = false

오류가 발생합니다.

확인되지 않은 식별자 "signedIn" 사용

한 가지 가능한 문제는 새 클래스가 다른 클래스와 다른 대상 또는 다른 대상을 가지고 있다는 것입니다.

예를 들어, 다른 하나는 테스트 대상이 있는 반면 다른 하나는 그렇지 않을 수 있습니다.이 특정한 경우에는 모든 클래스를 테스트 대상에 포함하거나 모든 클래스를 포함하지 않아야 합니다.

Targets

파일 이름을 바꾼 후에 이 문제가 발생한 적이 있습니다.Xcode 내에서 파일 이름을 바꿨지만, 이후 Xcode에서 파일 내 기능을 찾을 수 없었습니다.깨끗한 재구축으로도 문제가 해결되지는 않았지만 프로젝트를 닫고 다시 여는 것이 효과를 발휘했습니다.

Swift my의 'Use of Resolved Identifier'도 라이브러리를 가져오는 것을 잊어버린 경우에 발생합니다.예를 들어 다음과 같은 오류가 있습니다.

가 그 을 .UIKit

UIKit 수입

때때로 컴파일러는 당신의 수업에서 구문에 대해 혼란스러워 합니다.다른 곳의 원본을 붙여넣으면 이런 일이 많이 발생합니다.

"해결되지 않은" 소스 파일을 최소한으로 줄이고 청소 및 구축을 시도합니다.빌드가 성공적으로 완료되면 모든 복잡성을 클래스에 다시 추가합니다.

이것은 Xcode를 다시 시작하는 것이 작동하지 않을 때 저에게 그것을 사라지게 만들었습니다.

이 오류를 본 또 다른 곳은 프로젝트에 여러 대상여러 브리징 헤더가 있는 경우입니다.공유 클래스인 경우 모든 브리징 헤더에 리소스를 추가해야 합니다.

유용한 팁은 왼쪽 이슈 네비게이터 패널을 살펴보는 것입니다. 루트 개체는 불만을 발행하는 대상을 표시합니다.

저는 중첩 함수를 호출하려고 해서 이런 오류가 발생했습니다.그것을 고치기 위해 제가 해야 할 일은 그것이 보이는 범위로 기능을 가져오는 것이었습니다.

저의 경우, 같은 Target Membership에 있는 Object-C 파일을 가지고 있었습니다. 고쳤습니다.#import "YourObjectCFileHeader.h"eBridging-Header.h

당신이 선언하지 않았기 때문입니다.다른 클래스의 변수를 사용하려면 반드시 사용해야 합니다.

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

이 코드를 NewClass 코드 끝에 넣어야 합니다.

당신의.NewClass.UIViewController. 당신은 선언했습니다.signedIn인에ViewController.네가 원한다면NewClass수.NewClass에서 물려받습니다.

목표 전환 프로젝트에서 맨틀 프레임워크에 대한 오류가 발생했습니다.제가 시도한 것은,

  1. Bridging-Header.h 파일에 가져오기가 있는지 확인합니다.
  2. 아래 스크린샷과 같이 Target Membership for Framework in Mantle.h 파일을 변경합니다.

Private Membership 간에 전환하여 프로젝트를 먼저 빌드하고 오류가 발생합니다.그럼 맨틀.h 파일에 나타난 모든 프레임워크에 대해 Public Membership으로 프로젝트를 구축하면 성공할 수 있습니다.

Objective-C Swift 프로젝트에서 여러 프레임워크를 가진 빌딩의 버그일 뿐입니다.

enter image description here

이것이 작성한 클래스에 관한 것이라면, 클래스가 중첩되지 않았는지 확인합니다.

F.E

A.급속한

class A {

   class ARelated {

   }
}

var b = ARelated()는 '해결되지 않은 식별자 사용: Aelated'를 제공합니다.

다음 중 하나를 선택할 수 있습니다.

1) 동일한 파일에서 원하는 경우 클래스를 분리합니다.

A.급속한

class A {

}

class ARelated {

}

2) 동일한 구조를 유지하고 엔클로저 클래스를 사용하여 하위 클래스로 이동합니다.

var b = A.ARelated

제가 바보 같은 실수를 했습니다.코코팟 작업 공간에서 코드를 업데이트하는 동안 클래스를 공개 또는 공개로 언급하는 것을 잊었습니다.

별도 작업 공간에서 작업하는지 accessor 확인 부탁드립니다.

변수를 선언하는 것을 잊으셨습니다.그냥 집어넣어요.varsignedIn = false

제 문제는 코코포드 중 하나와 같은 이름으로 제 프로그램에 전화를 거는 것이었습니다.그것이 갈등을 일으켰습니다.해결책:다른 프로그램 이름을 만듭니다.

이것은 코드 샘플이 아니라 일반적으로 오류에 대한 것입니다.구글이 이 질문에 이 오류를 지시하기 때문에 다른 개발자들에게 유용할 수 있기 때문에 여기에 씁니다.


이러한 오류가 발생할 수 있는 또 다른 사용 사례는 다른 클래스의 메서드에 선택기를 추가하는 경우입니다.

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

그리고 또 다른 수업에서:

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

텐데요.#selector(cancelActionHandler)#selector(MockTextFieldTarget.cancelActionHandler), 당신은 얻을 것입니다.

해결되지 않은 식별자 사용

오류를 범실.

언급URL : https://stackoverflow.com/questions/28996730/use-of-unresolved-identifier-in-swift

반응형