Swift 类型为'的值;标签';没有成员';上次使用的';
我有一门课,Tags,用SwiftSwift 类型为'的值;标签';没有成员';上次使用的';,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
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开始。不幸的是,这是一个代码库,我可能不得不跳过它来更改变量名,因为我没有创建这部分代码。。哈哈,我希望我能找出原因并解决。我已经在这三天左右了,我不能再拖了,谢谢!不幸的是,我们看不到看不见的人物。。。但是现在他们不会隐身了,是吗?英雄联盟苹果必须允许开发者以这种或那种方式查看不可见的角色。我在周末被错误缠住了。