所以我一直在制作应用程序,一切都运行良好。但今天我像往常一样创建了一个新课程,由于某种原因,在本课程中,我无法从其他课程中访问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"
答案 0 :(得分:234)
一个可能的问题是,您的新课程与另一个目标有不同的目标或不同的目标。
例如,它可能有一个测试目标而另一个没有。对于这种特定情况,您必须在测试目标中包含所有类,或者不包括任何类。
答案 1 :(得分:12)
重命名文件后,一旦出现此问题。我从Xcode中重命名了文件,但之后Xcode在文件中找不到该函数。即使是干净的重建也不能解决问题,但是先关闭然后重新打开项目,即可使构建正常工作。
答案 2 :(得分:3)
对我来说,这个错误发生是因为我试图调用嵌套函数。我必须做的就是将函数 out 带到可见的范围内。
答案 3 :(得分:3)
答案 4 :(得分:3)
就我而言,我有一个Object-C文件,该文件也具有相同的目标成员身份。我通过在文件#import "YourObjectCFileHeader.h"
Bridging-Header.h
进行了修复
答案 5 :(得分:1)
因为你还没有声明它。如果要使用其他类的变量,则必须使用
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var DestViewController : ViewController = segue.destinationViewController as ViewController
DestViewController.signedIn = false
}
您必须将此代码放在NewClass代码的末尾
答案 6 :(得分:1)
有时编译器会对类中的语法感到困惑。如果您从其他地方粘贴源代码,就会发生这种情况。
尝试将“未解决的”源文件减少到最低限度,清理和构建。成功构建后,将所有复杂性添加回您的班级。
这让我在重新启动Xcode时无法正常工作。
答案 7 :(得分:1)
您的NewClass
继承自UIViewController
。您在signedIn
中声明了ViewController
。如果您希望NewClass
能够识别该变量,则必须在NewClass
继承的类中声明该变量。
答案 8 :(得分:1)
我在Objective-Swift项目中遇到了Mantle Framework的错误。 我试过的是,
答案 9 :(得分:0)
我发现此错误的另一个地方是您的项目 多个目标 和 多个桥接标题 。如果它是共享类,请确保将资源添加到所有桥接标头。
一个好的建议是查看左侧的“问题导航器”面板;根对象将显示发出投诉的目标。
答案 10 :(得分:0)
如果这是关于您创建的类,请确保该类未嵌套。
F.e
<强> A.swift 强>
class A {
class ARelated {
}
}
致电var b = ARelated()
会使用未解决的标识符:ARelated&#39;。
你可以:
1)如果需要在同一个文件中分隔类:
<强> A.swift 强>
class A {
}
class ARelated {
}
2)保持相同的结构并使用封闭类来到子类:
var b = A.ARelated
答案 11 :(得分:0)
如果在单独的工作区中工作,请检查是否有访问者。
答案 12 :(得分:0)
我的问题是用与它的cocoapods相同的名称调用我的程序。它引起了冲突。解决方案:创建一个其他名称的程序。
答案 13 :(得分: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)
,您将会得到
使用未解析的标识符
错误。
答案 14 :(得分:-1)
您忘记声明该变量。只需将var
放在signedIn = false