だから私はアプリを作ってきました、そしてすべてが素晴らしい仕事をしてきました。しかし今日、私はいつものように新しいクラスを作りました、そしてこのクラスで何らかの理由で私は他のクラスからパブリック/グローバル変数にアクセスすることができません。他のすべてのクラスでは可能ですが、今では新しいクラスを作ろうとするとできません。これはどのように修正されますか?
私は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"の使用
考えられる問題の1つは、新しいクラスに他のターゲットとは異なるターゲットがあることです。
例えば、それはテストターゲットを持っているかもしれませんが、他のものは持っていません。この特定のケースでは、テスト対象にすべてのクラスを含めるか、またはまったく含めないようにする必要があります。
私にとって入れ子になった関数を呼び出そうとしていたため、このエラーが発生しました。それを修正するために私がしなければならなかった唯一のことはそれが見えていた範囲に関数outを持ってくることでした。
Objective-Swift ProjectのMantle Frameworkでこのエラーが発生しました。私が試したのは、
最初に非公開メンバーシップを切り替えるとプロジェクトが構築され、エラーが発生します。次に、Mantle.hファイルに表示されるすべてのフレームワークについて、Public Membershipを使用してプロジェクトをビルドします。成功する必要があります。
それはObjective-C Swiftプロジェクトで複数のフレームワークを使って構築することの単なるバグです。
時々、コンパイラはあなたのクラスの構文について混乱します。他の場所からソースを貼り付けると、これはよく起こります。
「未解決の」ソースファイルを最低限のものまで減らし、クリーンアップして構築します。それがうまく構築されればあなたのクラスに戻ってすべての複雑さを加えることができます。
Xcodeを再起動してもうまくいかなかったとき、これは私にとっては無駄になりました。
宣言していないからです。あなたが他のクラスの変数を使いたいならば、あなたは使わなければなりません
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var DestViewController : ViewController = segue.destinationViewController as ViewController
DestViewController.signedIn = false
}
このコードをNewClassコードの最後に追加する必要があります。
あなたのNewClass
はUIViewController
を継承しています。 signedIn
をViewController
で宣言しました。 NewClass
がその変数を識別できるようにするには、NewClass
が継承しているクラスで宣言する必要があります。
私がこのエラーを見たもう一つの場所はあなたのプロジェクトがmultiple targets AND multiple bridging headersを持っているときです。共有クラスの場合は、必ずすべてのブリッジングヘッダーにリソースを追加してください。
良いヒントは、左側のIssue Navigatorパネルを見ることです。ルートオブジェクトは、クレームを発行しているターゲットを示します。
これが作成したクラスに関するものである場合は、そのクラスがネストされていないことを確認してください。
F.e
A.Swift
class A {
class ARelated {
}
}
var b = ARelated()
を呼び出すと、「未解決の識別子の使用:ARelated」と表示されます。
次のどちらかができます。
1)同じファイルで必要に応じてクラスを分けます。
A.Swift
class A {
}
class ARelated {
}
2)同じ構造を維持し、それを囲むクラスを使用してサブクラスにアクセスします。
var b = A.ARelated
私はばかな間違いをしました。 cocoapodワークスペースでコードを更新しているときに、クラスをpublicまたはopenとして言及するのを忘れました。
別のワークスペースで作業している場合はアクセサかどうかを確認してください。