Swift 类型为'的值;标签';没有成员';上次使用的';

Swift 类型为'的值;标签';没有成员';上次使用的';,swift,xcode,Swift,Xcode,我有一门课,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.f

我有一门课,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
    }
}
我可以从项目中的某些类访问字段,但有趣的是,我似乎无法从某些类访问某些字段

有问题的字段是
上次使用的
名称

当我运行“在工作区中查找选定符号”时,我发现这些字段在引用它们的某些文件中可见,而在其他文件中不可见

我实际上可以访问类中的类
标记
的其他字段

我无法从中访问它的类具有以下定义:

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有点bug,认为这些是保留字。
我会发表评论,但我没有足够的分数,因此我将作为答案发布

问题是
name
lastUsed
的声明有一个不可见字符(U+200B=“零宽度空格”)作为标识符的最后一个字符

下面是一个简短的例子,说明这似乎是一个悖论。第一个print语句不编译,但最后一个语句编译:

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也不会显示这个字符。在
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
struct标记{
让name=“name”
}
打印(Tags().name)/(1)错误:“Foo”类型的值没有成员“name”
打印(Tags().name)/(2)无错误
请注意,标识符名称中允许使用不可见字符,这已在中讨论过

第一个print语句是用Xcode的代码补全创建的,Xcode省略了尾随的不可见字符。我会认为这是一个错误。

第二个print语句是通过仔细复制
名称创建的​包含尾随不可见字符的标识符


摘要:Swift标识符可以包含不可见字符,但这些字符不能很好地与Xcode的代码完成配合使用,并且只会导致混淆。重写所有出现的这些标识符可以解决问题。

是否有相同的结果?我觉得应该是我的设置或者其他什么,或者是xcodeYeah相同结果的一些问题。我建议对变量使用不同的词,并将其删除。然而,如果你真的想弄清这个问题,我会从你在上面声明的@objc dynamic vars开始。不幸的是,这是一个代码库,我可能不得不跳过它来更改变量名,因为我没有创建这部分代码。。哈哈,我希望我能找出原因并解决。我已经在这三天左右了,我不能再拖了,谢谢!不幸的是,我们看不到看不见的人物。。。但是现在他们不会隐身了,是吗?英雄联盟苹果必须允许开发者以这种或那种方式查看不可见的角色。我在周末被错误缠住了。