我试图弄清楚为什么在Xcode 6.3.2中这种类型的构造会经常出现编译问题。
class Foo {
static let CONSTANT_NAME = "CONSTANT_STRING"
...
func bar () -> String {
var s = String(format:"%s,%d\n", CONSTANT_NAME, 7)
return s
}
...
}由于我理解这种语言,这应该是完全合法的代码,但是Xcode经常(hah-pun)与它有问题,从而导致错误。
“Foo类中没有成员CONSTANT_NAME”
如果我运气好,强迫它清理,然后重建它,有时它会自己整理和工作。其他时候,即使这样做,然后尝试一个开放/关闭项目仍然不能解决这个问题。
所以,我想我隐含的后续问题(如果上面的答案是--这是法律代码)是: Xcode Swift编译器--即使是这样的基本东西也很可能引起问题--这种错误的错误吗?如果是这样的话,斯威夫特似乎处于相当糟糕的状态。
发布于 2015-06-08 01:14:12
static是类属性,这意味着您必须将它称为ClassName.property。
class Foo {
static let CONSTANT_NAME = "CONSTANT_STRING"
func bar () -> String {
var s = String(format:"%s,%d\n", Foo.CONSTANT_NAME, 7)
return s
}
}那不是窃听器。它应该是这样的。类属性“属于”类。
如果希望代码不使用ClassName而工作,请不要使用static。
class Foo {
let CONSTANT_NAME = "CONSTANT_STRING"
func bar () -> String {
var s = String(format:"%s,%d\n",CONSTANT_NAME, 7)
return s
}
}苹果文档中的更多细节
发布于 2015-06-08 01:20:49
static let语法是合法和有效的。问题是当您访问该变量时必须完全限定它:
var s = String(format:"%s,%d\n", Foo.CONSTANT_NAME, 7)编译器的错误有点迟钝,但它说的是实话.CONSTANT_NAME不是成员,而是Foo:Swift性质类的类型属性。
发布于 2015-06-08 02:36:10
我听说你说要保存钥匙笔划。我个人一直试图通过挤奶每个捷径来使我的Swift代码尽可能地符合习惯,但是当您找到这样的代码时,您应该感到高兴的是,编译器要求您保持安全:
class Foo {
static let CONSTANT = "hello"
func bar() -> String {
let CONSTANT = "bye"
return CONSTANT // I know which one! Thanks Swift!
}
}
println(Foo.CONSTANT)
println(Foo().bar())https://stackoverflow.com/questions/30700022
复制相似问题