Swift에서 '미확인 식별자 사용'


93

그래서 저는 앱을 만들고 있었고 모든 것이 잘 작동했습니다. 하지만 오늘은 평소처럼 새 클래스를 만들었고 어떤 이유로이 클래스에서는 다른 클래스에서 Public / Global 변수에 액세스 할 수 없습니다. 다른 모든 수업은 할 수 있지만 지금은 새로운 수업을 만들려고 할 때마다 할 수 없습니다. 이 문제는 어떻게 해결됩니까?

Swift와 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"사용


예,이 수업을 여러 번 삭제하고 다시
Apple Geek

작동하는 것과 작동하지 않는 코드를 보여주세요.
Wez 2015 년

사용중인 XCode / Swift의 버전을 지정할 수 있습니까 (베타 버전인지 여부)?
lchamp 2015 년

@Ichamp Xcode 6.1은 베타가 아닙니다.
Apple Geek

1
이것이 완전한 코드입니까? 들여 쓰기 }로 인해 끝에 중괄호가 누락 된 것 같습니다.viewDidLoad()
Wez

답변:


296

한 가지 가능한 문제는 새 클래스에 다른 대상과 다른 대상이 있다는 것입니다.

예를 들어 테스트 대상은 있지만 다른 대상은 없을 수 있습니다. 이 특정 경우에는 테스트 대상에 모든 클래스를 포함하거나 아무것도 포함하지 않아야합니다.

목표


클래스가 다른 대상에있는 경우, 확인 당신은 당신의 신속한 파일의 상단에 가져
메디

2
헤헤, 그게 문제였습니다. 수업 목표를 설정하는 것을 잊었습니다. Tnx :)
tBug

오 이런,이 문제를 해결하는 데 몇 시간을 보냈습니다. 그런 어리석은 오류 메시지. 구문 오류도 더 좋습니다!
turingtested

응 .. 테스트 프로젝트의 대상에 설정되지 않았습니다 !! 당신은 감사
reidisaki

1
내 것이 있었지만 확인을 취소 한 다음 다시 확인하여이 문제를 해결하고 자동 완성 / 지능이 돌아 왔습니다!
Stephen J

10

한 번 파일 이름을 바꾼 후이 문제가 발생했습니다. Xcode 내에서 파일 이름을 변경했지만 나중에 Xcode가 파일에서 함수를 찾을 수 없습니다. 깨끗한 재 빌드로도 문제가 해결되지 않았지만 프로젝트를 닫았다가 다시 열면 빌드가 작동합니다.


이것은 파일의 위치 변경에도 적용됩니다
Logan George

정확히 내가 파일 참조를 제거한 다음 다시 추가했습니다. 모든 것이 작동했습니다
Hamed Nova

7

Swift의 'Use of Unresolved Identifier'는 라이브러리를 가져 오는 것을 잊었을 때도 발생합니다. 예를 들어 오류가 있습니다. 여기에 이미지 설명 입력

내가 잊은 UIKit

UIKit 가져 오기


1
수입 AVFoundation
Jenita _Alice4Real

4

때때로 컴파일러는 클래스의 구문에 대해 혼란스러워합니다. 다른 곳에서 소스를 붙여 넣으면 이런 일이 많이 발생합니다.

"해결되지 않은"소스 파일을 최소한으로 줄이고 정리하고 빌드하십시오. 성공적으로 빌드되면 모든 복잡성을 클래스에 다시 추가하십시오.

이것은 Xcode를 다시 시작할 때 작동하지 않을 때 나를 위해 사라졌습니다.


4

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

유용한 팁은 왼쪽 Issue Navigator 패널을 살펴 보는 것입니다. 루트 개체는 불만을 제기하는 대상을 보여줍니다.


3

나 에게이 오류는 중첩 함수 를 호출하려고했기 때문에 발생했습니다 . 나는 그것을 해결하도록해야했던 한가지는 기능을 가지고 있었다 밖으로 는 눈에 보였다 범위에.


"기능을 볼 수있는 범위로 가져 오십시오"라는 말은 공개로 표시한다는 의미입니까?
Barry Jones

아니요. 단순히 함수를 다른 범위로 이동 / 드래그하기 만하면됩니다. 즉, 클래스 범위 내에서
Honey

3

제 경우에는 동일한 Target Membership에있는 Object-C 파일이있었습니다. #import "YourObjectCFileHeader.h"내부 파일 을 추가하여 수정했습니다.Bridging-Header.h


1

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

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

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


네,하지만 다른 수업을 사용했고 그것들 없이도 잘 작동했습니다.이 새로운 수업을 만들 때입니다.
Apple Geek

2
이것은 작동하지 않습니다. 그는 자신의 클래스 내부가 아닌 전역 범위에서 signedIn 변수를 선언했습니다.
Sam

1

귀하의 NewClass상속에서 UIViewController. signedIn에서 선언하셨습니다 ViewController. 당신이 원하는 경우 NewClass해당 변수를 식별 할 수 그것은 당신의 클래스에 선언되어야 할 것이다 NewClass상속에서.


1

Objective-Swift 프로젝트에서 Mantle Framework에 대해이 오류가 발생했습니다. 내가 시도한 것은,

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

비공개 멤버십 사이를 전환하여 먼저 프로젝트를 빌드하고 오류가 발생합니다. 그런 다음 Mantle.h 파일에 나타난 모든 프레임 워크에 대해 Public Membership으로 프로젝트를 빌드하면 성공해야합니다.

Objective-C Swift 프로젝트에서 여러 프레임 워크로 빌드하는 버그 일뿐입니다.

여기에 이미지 설명 입력


0

만든 클래스와 관련된 경우 클래스가 중첩되지 않았는지 확인하십시오.

Fe

A.swift

class A {

   class ARelated {

   }
}

호출 var b = ARelated()하면 '해결되지 않은 식별자 사용 : ARelated'가 제공됩니다.

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

1) 동일한 파일에서 원하는 경우 클래스를 분리하십시오.

A.swift

class A {

}

class ARelated {

}

2) 동일한 구조를 유지하고 둘러싸는 클래스를 사용하여 하위 클래스로 이동하십시오.

var b = A.ARelated


0

나는 어리석은 실수를 저질렀다. cocoapod 작업 공간에서 코드를 업데이트하는 동안 클래스를 공개 또는 공개로 언급하는 것을 잊었습니다.

별도의 작업 공간에서 작업하는 경우 액세스 여부를 확인하십시오.


0

변수 선언을 잊었습니다. 그냥 var앞에 넣어signedIn = false


나는 그것이 게시 된 코드의 오타 일 뿐이라고 가정 할 것입니다 (에 누락 된 닫는 괄호와 함께 viewDidLoad.
shim

0

내 문제는 cocoapod 중 하나와 같은 이름으로 내 프로그램을 호출하는 것이 었습니다. 갈등을 일으켰습니다. 해결 방법 : 프로그램을 다른 이름으로 만드십시오.


0

이것은 코드 샘플에 대한 직접적인 것이 아니라 일반적으로 오류에 대한 것입니다. Google이이 오류를이 질문에 전달하므로 다른 개발자에게 유용 할 수 있으므로 여기에 작성합니다.


이러한 오류를 수신 할 수있는 또 다른 사용 사례는 다른 클래스의 메서드에 선택기를 추가 할 때입니다. 예 :

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)하면

확인되지 않은 식별자 사용

오류.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.