Итак, я делаю приложение, и все работает отлично. Но сегодня я сделал новый класс, как обычно, и по какой-то причине в этом классе я не могу получить доступ к публичной / глобальной переменной из других классов. Все остальные классы могут, но теперь, когда я пытаюсь создать новый класс, я не могу. Как бы это исправить?
Я использую 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"
}
в конце вашегоviewDidLoad()
Ответы:
Одна из возможных проблем заключается в том, что ваш новый класс имеет другую цель или цели, отличные от другого.
Например, у него может быть цель тестирования, а у другого - нет. В этом конкретном случае вы должны включить все свои классы в цель тестирования или ни один из них.
источник
Однажды у меня возникла такая проблема после переименования файла. Я переименовал файл из Xcode, но впоследствии Xcode не смог найти функцию в файле. Даже чистая перестройка не устранила проблему, но закрытие и повторное открытие проекта заставили сборку работать.
источник
«Использование неразрешенного идентификатора» в Swift также происходит, когда вы забыли импортировать библиотеку. Например, у меня ошибка:
В котором я забыл
UIKit
источник
Иногда компилятор не понимает синтаксиса вашего класса. Это часто случается, если вы вставляете исходный код откуда-то еще.
Попробуйте сократить «неразрешенный» исходный файл до минимума, очистив и построив. Как только он будет успешно построен, добавьте всю сложность обратно в свой класс.
Это заставило меня уйти, когда перезапуск Xcode не работал.
источник
Еще одно место, где я видел эту ошибку, - это когда ваш проект имеет несколько целей И несколько заголовков моста. . Если это общий класс, убедитесь, что вы добавили ресурс ко всем заголовкам моста.
Хороший совет - загляните в левую панель Issue Navigator; корневой объект покажет цель, которая подает жалобу.
источник
Для меня эта ошибка произошла из-за того, что я пытался вызвать вложенную функцию. Единственное , что я должен был сделать , чтобы он исправил , чтобы вывести функцию из в сферу , где она была видна.
источник
В моем случае у меня был файл Object-C, который также находился в том же целевом членстве. Я исправил, добавив
#import "YourObjectCFileHeader.h"
внутрь файлаBridging-Header.h
источник
Потому что вы этого не заявили. Если вы хотите использовать переменную другого класса, вы должны использовать
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { var DestViewController : ViewController = segue.destinationViewController as ViewController DestViewController.signedIn = false }
Вы должны поместить этот код в конец кода NewClass
источник
Ваше
NewClass
наследство отUIViewController
. Вы заявилиsignedIn
вViewController
. Если вы хотитеNewClass
иметь возможность идентифицировать эту переменную, ее нужно будет объявить в классе, от которого выNewClass
наследуете.источник
Я получил эту ошибку для Mantle Framework в моем проекте Objective-Swift. Я пробовал,
Переключитесь между частным членством, сначала создайте проект, в конечном итоге получите ошибки. Затем соберите проект с публичным членством для всех фреймворков, появившихся для файла Mantle.h , вы должны добиться успеха.
Это просто ошибка сборки с несколькими фреймворками в проекте Objective-C Swift.
источник
Если это касается созданного вами класса, убедитесь, что этот класс не вложен.
Fe
A.swift
class A { class ARelated { } }
при вызове
var b = ARelated()
будет выдано «Использование неразрешенного идентификатора: ARelated».Вы также можете:
1) разделите классы, если хотите, в одном файле:
A.swift
class A { } class ARelated { }
2) Сохраняйте ту же структуру и используйте включающий класс, чтобы перейти к подклассу:
var b = A.ARelated
источник
Я сделал глупую ошибку. Я забыл упомянуть класс как общедоступный или открытый при обновлении кода в рабочей области cocoapod.
Пожалуйста, проверьте, работает ли аксессуар в отдельном рабочем пространстве.
источник
Вы забыли объявить переменную. Просто поставьте
var
передsignedIn = false
источник
viewDidLoad
.Моя проблема заключалась в том, что моя программа вызывала то же имя, что и одно из ее коконоподов. Это вызвало конфликт. Решение: Создайте программу под другим именем.
источник
Это касается не непосредственно вашего примера кода, а в целом ошибки. Я пишу это здесь, потому что 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)
, вы получитеошибка.
источник