web-dev-qa-db-ja.com

Swiftでの '未解決の識別子の使用'

だから私はアプリを作ってきました、そしてすべてが素晴らしい仕事をしてきました。しかし今日、私はいつものように新しいクラスを作りました、そしてこのクラスで何らかの理由で私は他のクラスからパブリック/グローバル変数にアクセスすることができません。他のすべてのクラスでは可能ですが、今では新しいクラスを作ろうとするとできません。これはどのように修正されますか?

私は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"の使用

78
Apple Geek

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

例えば、それはテストターゲットを持っているかもしれませんが、他のものは持っていません。この特定のケースでは、テスト対象にすべてのクラスを含めるか、またはまったく含めないようにする必要があります。

Targets

238
lchamp

Swiftでの「未解決の識別子の使用」は、ライブラリをインポートするのを忘れたときにも発生します。例えば、私はエラーがあります: enter image description here

私はUIKitを忘れました

uIKitをインポート

3
Cons Bulaquena

私にとって入れ子になった関数を呼び出そうとしていたため、このエラーが発生しました。それを修正するために私がしなければならなかった唯一のことはそれが見えていた範囲に関数outを持ってくることでした。

3
Honey

Objective-Swift ProjectのMantle Frameworkでこのエラーが発生しました。私が試したのは、

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

最初に非公開メンバーシップを切り替えるとプロジェクトが構築され、エラーが発生します。次に、Mantle.hファイルに表示されるすべてのフレームワークについて、Public Membershipを使用してプロジェクトをビルドします。成功する必要があります。

それはObjective-C Swiftプロジェクトで複数のフレームワークを使って構築することの単なるバグです。

enter image description here

1
Vinod Supnekar

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

「未解決の」ソースファイルを最低限のものまで減らし、クリーンアップして構築します。それがうまく構築されればあなたのクラスに戻ってすべての複雑さを加えることができます。

Xcodeを再起動してもうまくいかなかったとき、これは私にとっては無駄になりました。

1
snakeoil

宣言していないからです。あなたが他のクラスの変数を使いたいならば、あなたは使わなければなりません

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

このコードをNewClassコードの最後に追加する必要があります。

1
Fil0tti

あなたのNewClassUIViewControllerを継承しています。 signedInViewControllerで宣言しました。 NewClassがその変数を識別できるようにするには、NewClassが継承しているクラスで宣言する必要があります。

1
M Johnson

私がこのエラーを見たもう一つの場所はあなたのプロジェクトがmultiple targets AND multiple bridging headersを持っているときです。共有クラスの場合は、必ずすべてのブリッジングヘッダーにリソースを追加してください。

良いヒントは、左側のIssue Navigatorパネルを見ることです。ルートオブジェクトは、クレームを発行しているターゲットを示します。

0
capikaw

これが作成したクラスに関するものである場合は、そのクラスがネストされていないことを確認してください。

F.e

A.Swift

class A {

   class ARelated {

   }
}

var b = ARelated()を呼び出すと、「未解決の識別子の使用:ARelated」と表示されます。

次のどちらかができます。

1)同じファイルで必要に応じてクラスを分けます。

A.Swift

class A {

}

class ARelated {

}

2)同じ構造を維持し、それを囲むクラスを使用してサブクラスにアクセスします。

var b = A.ARelated

0
htafoya

私はばかな間違いをしました。 cocoapodワークスペースでコードを更新しているときに、クラスをpublicまたはopenとして言及するのを忘れました。

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

0