У меня есть класс Tags в Swift.
public class Tags {
var lastUsed: UInt64
var frequency: Int
var id: String
var name: String
init(id: String = "", frequency: Int, lastUsed: UInt64, name: String) {
self.id = id
self.frequency = frequency
self.lastUsed = lastUsed
self.name = name
}
}
Я могу получить доступ к полям из некоторых классов в моем проекте, но, как ни странно, я не могу получить доступ к некоторым полям из некоторых классов.
Нарушающие поля: lastUsed
и name
.
Когда я запускаю Find Selected Symbol in Workspace, я обнаружил, что поля видны из некоторых файлов, где на них есть ссылки, и не видны из других файлов.
На самом деле я могу получить доступ к другим полям класса Tags
в классе.
Класс, из которого я не могу получить к нему доступ, имеет следующее определение:
import RealmSwift
class StoredTags: Object{
@objc dynamic var frequency: Int
@objc dynamic var id: String
@objc dynamic var lastUsed: UInt64
@objc dynamic var name: String
init(freq: Int, id: String, lastUsed: UInt64, name: String){
self.lastUsed = lastUsed
self.name = name
self.frequency = freq
self.id = id
}
init(t: Tags){
self.lastUsed = t.lastUsed. //Error-- Value of type 'Tags' has no member 'lastUsed'
self.name = t.name
self.frequency = t.frequency
self.id = t.id
}
class func getFromTags(t: Tags) -> StoredTags{
let st = StoredTags()
st.frequency = t.frequency
st.id = t.id
st.lastUsed = t.lastUsed//Error-- Value of type 'Tags' has no member 'lastUsed'
st.name = t.name//Error-- Value of type 'Tags' has no member 'name'
return st
}
required override init() {
self.frequency = 0
self.id = ""
self.lastUsed = 0
self.name = ""
}
}
Я подозреваю, что это может быть какая-то проблема с xcode; но я перепробовал все что приходит на ум.
Подскажите, пожалуйста, в чем тут может быть дело?
Я попробовал ваш код и получил те же результаты ошибки. Несмотря на то, что я не могу понять, почему отображаются ошибки, если вы измените имена на что-то более конкретное, например, tagsLastUsed и tagsName, все будет работать нормально. Я предполагаю, что xcode немного ошибается и думает, что это зарезервированные слова. Прокомментировал бы, но у меня недостаточно баллов для этого, поэтому я публикую как ответ
Да такие же результаты. Я бы рекомендовал просто использовать разные слова для переменных и отмахнуться от них. Однако, если вы действительно хотите разобраться в этом, я бы начал с динамических переменных @objc, которые вы объявили выше.
Хммм, к сожалению, это кодовая база, через которую мне, возможно, придется прыгать, чтобы изменить имена переменных, поскольку я не создавал эту часть кода.. лол. Я надеялся, что смогу найти причину и исправить. Я был на этом в течение последних 3 дней или около того, и я не могу позволить себе тянуть дальше
Проблема в том, что объявления name
и lastUsed
имеют невидимый символ (U+200B = "ZERO WIDTH SPACE") в качестве последнего символа идентификатора.
Вот небольшой пример, демонстрирующий то, что кажется парадоксом. Первый оператор печати не компилируется, а последний компилируется:
struct Tags {
let name = "name"
}
print(Tags().name) // (1) Error: Value of type 'Foo' has no member 'name'
print(Tags().name) // (2) No error
К сожалению, Xcode не отображает этот символ, даже если включен «Editor->Invisibles». Открытие файла в vi
показывает проблему:
struct Tags {
let name<200b> = "name"
}
print(Tags().name) // (1) Error: Value of type 'Foo' has no member 'name'
print(Tags().name<200b>) // (2) No error
Обратите внимание, что в именах идентификаторов разрешены невидимые символы, это обсуждалось на форуме Swift.
Первый оператор печати был создан с завершением кода Xcode, и Xcode опускает завершающий невидимый символ. Я бы посчитал это багом.
Второй оператор печати был создан путем тщательного копирования идентификатора name
, включая невидимый символ в конце.
Резюме: Идентификаторы Swift могут содержать невидимые символы, но они плохо работают с завершением кода Xcode и вызывают только путаницу. Перезапись всех вхождений этих идентификаторов устраняет проблему.
Большое спасибо! жаль, что мы не можем видеть невидимых персонажей... но тогда они не были бы невидимыми сейчас или были бы? лол .... Apple должна позволять разработчикам так или иначе просматривать невидимых персонажей. Я застрял с ошибкой на выходных.
Как у вас были те же результаты? Я чувствовал, что это должна быть моя настройка или что-то в этом роде, или какие-то проблемы с xcode.