Значение типа «Теги» не имеет члена «lastUsed»

У меня есть класс 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; но я перепробовал все что приходит на ум.

Подскажите, пожалуйста, в чем тут может быть дело?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
467
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я попробовал ваш код и получил те же результаты ошибки. Несмотря на то, что я не могу понять, почему отображаются ошибки, если вы измените имена на что-то более конкретное, например, tagsLastUsed и tagsName, все будет работать нормально. Я предполагаю, что xcode немного ошибается и думает, что это зарезервированные слова. Прокомментировал бы, но у меня недостаточно баллов для этого, поэтому я публикую как ответ

Как у вас были те же результаты? Я чувствовал, что это должна быть моя настройка или что-то в этом роде, или какие-то проблемы с xcode.

gbenroscience 14.12.2020 13:21

Да такие же результаты. Я бы рекомендовал просто использовать разные слова для переменных и отмахнуться от них. Однако, если вы действительно хотите разобраться в этом, я бы начал с динамических переменных @objc, которые вы объявили выше.

Dimitris Delis 14.12.2020 13:32

Хммм, к сожалению, это кодовая база, через которую мне, возможно, придется прыгать, чтобы изменить имена переменных, поскольку я не создавал эту часть кода.. лол. Я надеялся, что смогу найти причину и исправить. Я был на этом в течение последних 3 дней или около того, и я не могу позволить себе тянуть дальше

gbenroscience 14.12.2020 13:39
Ответ принят как подходящий

Проблема в том, что объявления 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 должна позволять разработчикам так или иначе просматривать невидимых персонажей. Я застрял с ошибкой на выходных.

gbenroscience 14.12.2020 16:52

Другие вопросы по теме