[英]'Use of Unresolved Identifier' in 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”
一個可能的問題是您的新班級與另一個班級有一個或多個不同的目標。
例如,它可能有一個測試目標,而另一個沒有。 對於這種特定情況,您必須將所有類都包含在測試目標中,或者不包含任何類。
一旦我在重命名文件后遇到這個問題。 我從 Xcode 中重命名了該文件,但之后 Xcode 在文件中找不到該函數。 即使是干凈的重建也不能解決問題,但是關閉然后重新打開項目使構建工作。
有時編譯器會對你的類中的語法感到困惑。 如果您從其他地方粘貼源代碼,這種情況會發生很多。
嘗試將“未解決”的源文件減少到最低限度,清理和構建。 成功構建后,將所有復雜性添加回您的類。
當重新啟動 Xcode 不起作用時,這使我消失了。
我看到此錯誤的另一個地方是當您的項目有多個目標和多個橋接頭時。 如果它是共享類,請確保將資源添加到所有橋接頭中。
一個很好的提示是查看左側的“問題導航器”面板; 根對象將顯示發出投訴的目標。
對我來說,發生此錯誤是因為我試圖調用嵌套函數。 唯一的事情我不得不這樣做有它固定為使功能出一個范圍,其中它是可見的。
就我而言,我有一個 Object-C 文件,它也屬於同一目標成員資格。 我通過在文件Bridging-Header.h
添加#import "YourObjectCFileHeader.h"
修復
因為你還沒有聲明。 如果你想使用另一個類的變量,你必須使用
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var DestViewController : ViewController = segue.destinationViewController as ViewController
DestViewController.signedIn = false
}
您必須將此代碼放在 NewClass 代碼的末尾
您的NewClass
繼承自UIViewController
。 您在ViewController
聲明了signedIn
。 如果您希望NewClass
能夠識別該變量,則必須在您的NewClass
繼承的類中聲明它。
如果這是關於您創建的類,請確保該類沒有嵌套。
鐵
迅捷
class A {
class ARelated {
}
}
調用var b = ARelated()
將給出“使用未解析的標識符:ARelated”。
您可以:
1)如果需要在同一個文件上分開類:
迅捷
class A {
}
class ARelated {
}
2)保持相同的結構並使用封閉類來獲取子類:
var b = A.ARelated
我犯了一個愚蠢的錯誤。 在 cocoapod 工作區中更新代碼時,我忘記提及該類是公開的還是開放的。
如果在單獨的工作區中工作,請檢查是否有附件。
你忘記聲明變量了。 只需將var
放在signedIn = false
前面
我的問題是使用與其中一個 cocoapods 相同的名稱調用我的程序。 它引起了沖突。 解決方案:創建一個程序不同的名稱。
這不是直接針對您的代碼示例,而是關於錯誤的一般信息。 我在這里寫它,因為谷歌將這個錯誤指向這個問題,所以它可能對其他開發人員有用。
收到此類錯誤的另一個用例是,當您向另一個類中的方法添加選擇器時,例如:
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)
,您將得到
使用未解析的標識符
錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.