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

考えられる1つの問題は、新しいクラスに別のターゲットと異なるターゲットが含まれていることです。

たとえば、テスト対象はあるが、他にはない場合があります。この特定のケースでは、すべてのクラスをテストターゲットに含めるか、どれも含めないようにする必要があります。

目標


クラスが別のターゲットにある場合は、swiftファイルの上にインポートするようにしてください
Medhi

2
へへ、それは問題でした。クラスのターゲットを設定するのを忘れました。Tnx :)
tBug

ああ、私はこれを解決するために数時間を費やしました。そのような愚かなエラーメッセージ。構文エラーでさえ良いです!
テスト済み

うん..テストプロジェクトのターゲットに設定されていませんでした!! ありがとう
reidisaki

1
鉱山は入ったが、チェックを外してから再度チェックしたところ、これが修正され、オートコンプリート/インテリセンスが戻ってきた!
Stephen J

7

Swiftでの「未解決の識別子の使用」は、ライブラリのインポートを忘れたときにも発生します。たとえば、私はエラーがあります: ここに画像の説明を入力してください

私が忘れた UIKit

UIKitをインポートする


1
AVFoundationをインポート
Jenita _Alice4Real

5

ファイルの名前を変更した後でこの問題が発生しました。Xcode内からファイルの名前を変更しましたが、その後Xcodeはファイル内で関数を見つけることができませんでした。クリーンなリビルドでも問題は解決しませんでしたが、プロジェクトを閉じてから再度開くと、ビルドが機能しました。


これは、ファイルの場所を変更する場合にも機能します
Logan George

正確に私はファイル参照を削除してからもう一度追加しました。すべてが働いていた
ハメドノヴァ

4

コンパイラがクラスの構文について混乱することがあります。他の場所からソースを貼り付けた場合、これはよく起こります。

「未解決」のソースファイルを必要最小限に減らして、クリーンアップしてビルドしてみてください。ビルドが成功したら、すべての複雑さをクラスに戻します。

これにより、Xcodeを再起動してもうまくいかなかった場合に、この問題が解消されました。


4

このエラーが発生した別の場所は、プロジェクトに複数のターゲット複数のブリッジングヘッダーがある場合です。共有クラスの場合は、必ずすべてのブリッジングヘッダーにリソースを追加してください。

良いヒントは、左側の課題ナビゲーターパネルを確認することです。ルートオブジェクトには、クレームを発行しているターゲットが表示されます。


3

入れ子関数を呼び出そうとしたため、このエラーが発生しました。私はそれが固定持ってしなければならなかった唯一のことは、機能を持っていたアウトそれが見えたスコープに。


「機能が見える範囲に関数を引き出す」ということは、それをパブリックとしてマークすることを意味しますか?
バリージョーンズ、

いいえ。関数を別のスコープに純粋に移動/ドラッグする、つまりクラスのスコープの下で
Honey

3

私の場合、同じターゲットメンバーシップにある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ましたViewControllerNewClassその変数を識別できるようにしたい場合は、NewClass継承元のクラスで宣言する必要があります。


1

私のObjective-SwiftプロジェクトのMantle Frameworkでこのエラーが発生しました。私が試したのは、

  1. Bridging-Header.hファイルにインポートがあるかどうかを確認します
  2. 下のスクリーンショットに示すように、Mantle.hファイルのフレームワークのターゲットメンバーシップを変更します。

最初にプライベートメンバーシップを切り替えてプロジェクトをビルドすると、エラーが発生します。次に、Mantle.hに表示されるすべてのフレームワークのパブリックメンバーシップでプロジェクトをビルドします。ファイルに表示さます。成功する必要があります。

これは、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

私は愚かな間違いをしました。ココアポッドワークスペースでコードを更新しているときに、クラスをパブリックまたはオープンとして説明するのを忘れました。

別のワークスペースで作業している場合は、アクセサがあるかどうかを確認してください。


0

変数を宣言するのを忘れました。のvar前に置くだけsignedIn = false


私はそれが上の行方不明閉じ括弧と一緒に(ポストされたコードでは、単にタイプミスであることを前提としていますviewDidLoad
シム

0

私の問題は、ココアポッドの1つと同じ名前でプログラムを呼び出すことでした。それは対立を引き起こした。解決策:プログラムに別の名前を付けます。


0

これはコードサンプルに直接ではなく、一般にエラーについてです。ここで書いているのは、Googleがこのエラーをこの質問に向けているため、他の開発者に役立つ可能性があるためです。


このようなエラーを受け取る可能性があるもう1つの使用例は、別のクラスのメソッドにセレクターを追加する場合です。

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.