Swift中“使用未解析的标识符”

时间:2015-03-11 20:31:00

标签: ios xcode swift

所以我一直在制作应用程序,一切都运行良好。但今天我像往常一样创建了一个新课程,由于某种原因,在本课程中,我无法从其他课程中访问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"

15 个答案:

答案 0 :(得分:234)

一个可能的问题是,您的新课程与另一个目标有不同的目标或不同的目标。

例如,它可能有一个测试目标而另一个没有。对于这种特定情况,您必须在测试目标中包含所有类,或者不包括任何类。

Targets

答案 1 :(得分:12)

重命名文件后,一旦出现此问题。我从Xcode中重命名了文件,但之后Xcode在文件中找不到该函数。即使是干净的重建也不能解决问题,但是先关闭然后重新打开项目,即可使构建正常工作。

答案 2 :(得分:3)

对我来说,这个错误发生是因为我试图调用嵌套函数。我必须做的就是将函数 out 带到可见的范围内。

答案 3 :(得分:3)

当你忘记导入库时,我也会发生在Swift中使用“未解析的标识符”。例如,我有错误: enter image description here

我在其中忘记了UIKit

  

导入UIKit

答案 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的错误。 我试过的是,

  1. 检查Bridging-Header.h文件中是否有导入
  2. Mantle.h 文件中更改框架的目标成员资格,如下面的屏幕截图所示。
  3. 私人会员之间切换首先构建项目,最终出现错误。 然后为 Mantle.h 文件中出现的所有框架构建具有公共成员资格的项目,您必须获得成功。

    这只是在Objective-C Swift项目中使用多个框架构建的错误。

    enter image description here

答案 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)

我犯了一个愚蠢的错误。我忘了在更新cocoapod工作区中的代码时将该类提及为public或open。

如果在单独的工作区中工作,请检查是否有访问者。

答案 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

前面